【C++】JSON文件的读取和生成

转自   http://my.oschina.net/Tsybius2014/blog/289527


一、从字符串中读取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 <iostream>
 
#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 <iostream>
#include <fstream>
 
#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 <iostream>
#include <fstream>
 
#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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值