一、从字符串中读取JSON
a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include
#include "json/json.h"
using
namespace
std;
int
main()
{
//字符串
const
char
* str =
"{\"praenomen\":\"Gaius\",\"nomen\":\"Julius\",\"cognomen\":\"Caezar\","
"\"born\":-100,\"died\":-44}"
;
Json::Reader reader;
Json::Value root;
//从字符串中读取数据
if
(reader.parse(str,root))
{
string praenomen = root[
"praenomen"
].asString();
string nomen = root[
"nomen"
].asString();
string cognomen = root[
"cognomen"
].asString();
int
born = root[
"born"
].asInt();
int
died = root[
"died"
].asInt();
cout << praenomen +
" "
+ nomen +
" "
+ cognomen
<<
" was born in year "
<< born
<<
", died in year "
<< died << endl;
}
return
0;
}
|
makefile文件
1
2
3
4
5
6
7
8
|
LIB=-L
/usr/local/lib/libjson/
-ljson_linux-
gcc
-4.4.7_libmt
a: a.o
g++ -o a -std=c++0x a.o $(LIB)
a.o: a.cpp
g++ -c a.cpp
clean:
rm
-rf a.o a
|
运行结果
二、从文件中读取JSON
PersonalInfo.json(一个存储了JSON格式字符串的文件)
1
2
3
4
5
6
7
8
9
10
11
12
|
{
"name"
:
"Tsybius"
,
"age"
:23,
"sex_is_male"
:
true
,
"partner"
:
{
"partner_name"
:
"Galatea"
,
"partner_age"
:21,
"partner_sex_is_male"
:
false
},
"achievement"
:[
"ach1"
,
"ach2"
,
"ach3"
]
}
|
a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include
#include
#include "json/json.h"
using
namespace
std;
int
main()
{
Json::Reader reader;
Json::Value root;
//从文件中读取
ifstream is;
is.open(
"PersonalInfo.json"
, ios::binary);
if
(reader.parse(is,root))
{
//读取根节点信息
string name = root[
"name"
].asString();
int
age = root[
"age"
].asInt();
bool
sex_is_male = root[
"sex_is_male"
].asBool();
cout <<
"My name is "
<< name << endl;
cout <<
"I'm "
<< age <<
" years old"
<< endl;
cout <<
"I'm a "
<< (sex_is_male ?
"man"
:
"woman"
) << endl;
//读取子节点信息
string partner_name = root[
"partner"
][
"partner_name"
].asString();
int
partner_age = root[
"partner"
][
"partner_age"
].asInt();
bool
partner_sex_is_male = root[
"partner"
][
"partner_sex_is_male"
].asBool();
cout <<
"My partner's name is "
<< partner_name << endl;
cout << (partner_sex_is_male ?
"he"
:
"she"
) <<
" is "
<< partner_age <<
" years old"
<< endl;
//读取数组信息
cout <<
"Here's my achievements:"
<< endl;
for
(
int
i = 0; i < root[
"achievement"
].size(); i++)
{
string ach = root[
"achievement"
][i].asString();
cout << ach <<
'\t'
;
}
cout << endl;
cout <<
"Reading Complete!"
<< endl;
}
is.close();
return
0;
}
|
makefile
1
2
3
4
5
6
7
8
|
LIB=-L
/usr/local/lib/libjson/
-ljson_linux-
gcc
-4.4.7_libmt
a: a.o
g++ -o a -std=c++0x a.o $(LIB)
a.o: a.cpp
g++ -c a.cpp
clean:
rm
-rf a.o a
|
运行结果
三、将信息保存为JSON格式
a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include
#include
#include "json/json.h"
using
namespace
std;
int
main()
{
//根节点
Json::Value root;
//根节点属性
root[
"name"
] = Json::Value(
"Tsybius"
);
root[
"age"
] = Json::Value(23);
root[
"sex_is_male"
] = Json::Value(
true
);
//子节点
Json::Value partner;
//子节点属性
partner[
"partner_name"
] = Json::Value(
"Galatea"
);
partner[
"partner_age"
] = Json::Value(21);
partner[
"partner_sex_is_male"
] = Json::Value(
false
);
//子节点挂到根节点上
root[
"partner"
] = Json::Value(partner);
//数组形式
root[
"achievement"
].append(
"ach1"
);
root[
"achievement"
].append(
"ach2"
);
root[
"achievement"
].append(
"ach3"
);
//直接输出
cout <<
"FastWriter:"
<< endl;
Json::FastWriter fw;
cout << fw.write(root) << endl << endl;
//缩进输出
cout <<
"StyledWriter:"
<< endl;
Json::StyledWriter sw;
cout << sw.write(root) << endl << endl;
//输出到文件
ofstream os;
os.open(
"PersonalInfo"
);
os << sw.write(root);
os.close();
return
0;
}
|
makefile
1
2
3
4
5
6
7
8
|
LIB=-L
/usr/local/lib/libjson/
-ljson_linux-
gcc
-4.4.7_libmt
a: a.o
g++ -o a -std=c++0x a.o $(LIB)
a.o: a.cpp
g++ -c a.cpp
clean:
rm
-rf a.o a
|
运行结果
生成的文件PersonalInfo.json
1
2
3
4
5
6
7
8
9
10
11
|
{
"achievement"
: [
"ach1"
,
"ach2"
,
"ach3"
],
"age"
: 23,
"name"
:
"Tsybius"
,
"partner"
: {
"partner_age"
: 21,
"partner_name"
:
"Galatea"
,
"partner_sex_is_male"
:
false
},
"sex_is_male"
:
true
}
|
END