1. 交叉编译链接: linux编译jsoncpp_linux交叉编译jsoncpp_我是谁??的博客-CSDN博客

2. json格式的解析

json文件包含内容如下,需要解析出zhangsan及其同学的信息;

{
	"name":"zhangsan",
	"age":18,
	"score":{
	  "math":"prefect",
	  "english":90
	},
	"classmate":[
		{
			"name":"lisi",
			"age":19,
			"score":{
			  "math":"good",
			  "english":120
			}
		},
		{
			"name":"wanger",
			"age":17,
			"score":{
			  "math":"nice",
			  "english":88
			}
		}
	]
}

 利用jsoncpp解析上述json内容的c++代码如下:

Json::Value json_value;
Json::Reader json_reader;
ifstream infile("./info.json",ios::binary);
if(infile.is_open()){
   if(json_reader.parse(infile, json_value)){
        std::string ZSName = json_value["name"].asString();
        Json::Int ZSAge = json_value["age"].asInt();
        std::string ZSMath = json_value["score"]["math"].asString();
        Json::Int ZSEng = json_value["score"]["english"].asInt();
        std::cout << "Name:" << ZSName << " Age:"<<ZSAge 
                  << " math:" << ZSMath << " eng:" << ZSEng << endl;

        Json::Value classMate = json_value["classmate"];
        printf("classMate size = %d \n",classMate.size());

        for(int i = 0; i < classMate.size(); ++i){

            std::cout << "Name:" << classMate[i]["name"].asString() 
                      << " Age:"<<classMate[i]["age"].asInt()
                      << " math:" << classMate[i]["score"]["math"].asString() 
                      << " eng:" << classMate[i]["score"]["english"].asInt() 
                      << endl;
        }

    }else{
        printf("parse failed \n");
    }

    infile.close();
}


/*运行结果:
  Name:zhangsan Age:18 math:prefect eng:90
  classMate size = 2 
  Name:lisi Age:19 math:good eng:120
  Name:wanger Age:17 math:nice eng:88
*/

/*
举一反三:多层结构写法类似
*/

 

 3. 打包为json格式

//打包
Json::Value json_value;
json_value["name"] = Json::Value("zhangsan");
json_value["age"] = Json::Value(18);

Json::Value score;
score["math"] = Json::Value("prefect");
score["english"] = Json::Value(90);
json_value["score"] = score;

Json::Value classmateArr;

//打包lisi信息
Json::Value classmateLi;
classmateLi["name"] = Json::Value("lisi");
classmateLi["age"] = Json::Value(19);

Json::Value classmateScoreLi;
classmateScoreLi["math"] = Json::Value("good");
classmateScoreLi["english"] = Json::Value(120);
classmateLi["score"] = classmateScoreLi;

//打包wanger信息
Json::Value classmateWang;
classmateWang["name"] = Json::Value("wanger");
classmateWang["age"] = Json::Value(17);

Json::Value classmateScoreWang;
classmateScoreWang["math"] = Json::Value("nice");
classmateScoreWang["english"] = Json::Value(88);
classmateWang["score"] = classmateScoreWang;

//加入数组
classmateArr.append(classmateLi);
classmateArr.append(classmateWang);

//将数组加入主体
json_value["classmate"] = classmateArr;

//写入文件
Json::FastWriter writer;
const std::string json_file = writer.write(json_value);

ofstream outfile("/mnt/mount/photo/writeInfo.json",ios::binary);
outfile.write(json_file.c_str(), json_file.length());

outfile.close();

/*
内容和上面一样,只是排版是横向的;
*/
07-16 10:07