C++操作Json字符串

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

时间: 2024-10-10 17:00:06

C++操作Json字符串的相关文章

Newtonsoft.Json 操作 JSON 字符串

Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json.大多数人都会选择性能以及通用性较好Json.NET,这个不是微软的类库,但是一个开源的世界级的Json操作类库,从下面的性能对比就可以看到它的其中之一的性能优点. 齐全的API介绍,使用方式简单

让C#可以像Javascript一样操作Json

Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率). 来自百度百科的介绍 Json的优点 数据格式比较简单,易于读写,格式都是压缩

操作Json

C#可以像Javascript一样操作Json 阅读目录 Json的简介 Json的优点 传统操作Json 简易操作Json Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也

C# 技巧(3) C# 操作 JSON

RestAPI中, 经常需要操作json字符串,  需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串. C# 操作json,  比较简单.  本文介绍几种方法 阅读目录 步骤 Json 字符串 反序列化成对象 共需要2步: 第一步:建立相应的实体类 第二步: 调用方法把Json字符串"反序列化"成对象 了解json的语法 首先要了解json的语法,这样才能知道怎么创建实体类. Json 的语法很简单, 就四条 数

C#操作JSON学习

JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较◆可读性JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输XML允许使用方便的标签,所以文件尺寸是要比JSON大的.而且JSON源

C# 操作 JSON

(转自:小坦克 http://www.cnblogs.com/TankXiao/p/3637495.html) RestAPI中, 经常需要操作json字符串,  需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串. C# 操作json,  比较简单.  本文介绍几种方法 阅读目录 步骤 了解json的语法 创建实体类的例子 自动生成JSON的实体类 使用第三方工具 Newtonsoft.Json.dll 步骤 Json 字符串 反序

.NET操作JSON

http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-json.html JSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串.操作JSON通常有以下几种方式:1. 原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串.如非必要,应该很少人会走这条路,从头再来的. 2. 通用方式[★★★★★]: 这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.code

VBScript把json字符串解析成json对象的2个方法

这篇文章主要介绍了VBScript把json字符串解析成json对象的2个方法,本文通过MSScriptControl.ScriptControl和jscript实现,需要的朋友可以参考下 asp/vbscript将json字符解析为json对象的方法,如果asp使用jscript来编写服务器端代码操作json字符串就简单了,vbscript需要MSScriptControl.ScriptControl或者服务器端的jscript来作为中间体才行. vbscript将json字符解析为json对

C#中用JavaScriptSerializer和Json.Net操作json格式的文件

1.json文件 2.写出对应的类 1 //折扣 2 public class Discount 3 { 4 public string Qty { get; set; } 5 public string percentage { get; set; } 6 } 7 //产品信息 8 public class ProductInfo 9 { 10 public string packing { get; set; } 11 public string Qty { get; set; } 12 p