使用jsoncpp解析JSON数据(转)

前端之家收集整理的这篇文章主要介绍了使用jsoncpp解析JSON数据(转)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自:http://www.cppfans.org/1445.html

1.jsoncpp是什么?

jsoncpp是一个使用C++语言来解析json文件的开源库,其项目地址为:http://sourceforge.net/projects/jsoncpp/,属于免费项目,任何人都可以下载使用

2. 编译jsoncpp

jsoncpp文件中提供了vs71的工程文件以及makerelease.py文件,用来编译,里面分为jsontest、lib_json、test_lib_json三个工程,按照自己需要的编译。

注意:如果使用VS默认的编译选项MTd或者MT,在使用json_libmtd.lib的时候可能会出现LNK2038错误(我使用的VS2012 vc110环境)所以请修改MTD为MDd,MT为MD

3.使用jsoncpp读JSON文件

如何将lib库添加进VS工程中在此就不赘述了。先看第一个读文件的例

1
2
3
4
5
6
// JSON文件
{ "address" : [
{ "name" : "eliteYang" , "email" : "elite_yang@163.com" } ,
{ "name" : "AAA" , "email" : "aaa@163.com" } ,
{ "name" : "BBB" , "email" : "bbb@163.com" }
] }
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
/**
* file : jsoncpp_test.cpp
* author : eliteYang
* email: elite_yang@163.com
* blog : http://www.cppfasn.org
* desc : json cpp test
*/
#include <fstream>
#include <string>
#include "jsoncpp/json.h"
@H_751_301@
int _tmain ( int argc , _TCHAR * argv [ ] )
{
std :: ifstream ifs ;
ifs . open ( "test.json" ) ;
Json :: Reader reader ;
Json :: Value root ;
if ( ! reader . parse ( ifs , root , false ) )
{ return - 1 ; }
Json :: Value add_value = root [ "address" ] ;
for ( int i = 0 ; i < add_value . size ( ) ; ++ i )
{
Json :: Value temp_value = add_value [ i ] ;
std :: string strName = temp_value [ "name" ] . asString ( ) ;
std :: string strMail = temp_value [ "email" ] . asString ( ) ;
std :: cout << "name: " << strName << " email: " << strMail << std :: endl ;
// use value array[index]
//Json::Value temp_value = add_value[i];
//std::string strName = add_value[i]["name"].asString();
//std::string strMail = add_value[i]["email"].asString();
//std::cout << "name: " << strName << " email: " << strMail << std::endl;
}
system ( "Pause" ) ;
return 0 ;
}

结果:

1
2
3
4
name : eliteYang email : elite_yang @ 163.com
name : AAA email : aaa @ 163.com
name : BBB email : bbb @ 163.com
请按任意键继续 . . .

跟我们文件中的数据完全一致。

4.使用JSON写入一块数据

我们继续使用上述文件,在中间加上一块数据。我们插入一个新的{"name": "append","email": "append@163.com"}

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
/**
* file : jsoncpp_test.cpp
* author : eliteYang
* email: elite_yang@163.com
* blog : http://www.cppfasn.org
* desc : json cpp test
*/
#include <fstream>
#include <string>
#include "jsoncpp/json.h"
int _tmain ( int argc , _TCHAR * argv [ ] )
{
std :: ifstream ifs ;
ifs . open ( "test.json" ) ;
Json :: Reader reader ;
Json :: Value root ;
if ( ! reader . parse ( ifs , false ) )
{ return - 1 ; }
Json :: Value & add_value = root [ "address" ] ;
Json :: Value append_value ;
@H_910_1301@ append_value [ "name" ] = "append" ;
append_value [ "email" ] = "append@163.com" ;
add_value . append ( append_value ) ;
for ( int i = 0 ; i < add_value . size ( ) ; ++ i )
{
Json :: Value temp_value = add_value [ i ] ;
std :: string strName = temp_value [ "name" ] . asString ( ) ;
std :: string strMail = temp_value [ "email" ] . asString ( ) ;
std :: cout << "name: " << strName << " email: " << strMail << std :: endl ;
}
Json :: FastWriter writer ;
std :: string json_append_file = writer . write ( root ) ;
std :: ofstream ofs ;
ofs . open ( "test_append.json" ) ;
ofs << json_append_file ;
system ( "Pause" ) ;
return 0 ;
}

结果:

1
2
3
4
5
name : eliteYang email : elite_yang @ 163.com
name : AAA email : aaa @ 163.com
name : BBB email : bbb @ 163.com
name : append email : append @ 163.com
请按任意键继续 . . .
1
2
// test_append.json
{ "address" : [ { "email" : "elite_yang@163.com" , "name" : "eliteYang" } , { "email" : "aaa@163.com" , "name" : "AAA" } , { "email" : "bbb@163.com" , "name" : "BBB" } , { "email" : "append@163.com" , "name" : "append" } ] }

当然了,jsoncpp对数组的解析也支持STL中迭代器的风格,不过我个人觉得还是数组好理解一些。迭代器的解析风格就不写了,大家可以自己摸索下,主要是使用Json::Value::Members。

JSON官方还是非常推荐用jsoncpp来解析JSON文件的,大家也看到了,确实比较方便。

btw.因为这两天笔记本散热不好,所以接了套螺丝刀将笔记本大卸八块,扫了扫灰,然后又装上了,结果神奇的就好了,果然是贱啊,欠拆。所以json系列的文章就晚了几天,非常抱歉,好了,不早了,该睡觉了,各位晚安。

本文固定链接:http://www.cppfans.org/1445.html | C++爱好者博客

猜你在找的Json相关文章