Jsoncpp是目前比较好用的开源Json解析库,现在总结一下它的使用方法,理解,以供以后查阅。
在引入Jsoncpp的时候我们看到Jsoncpp里边的常用的cpp文件,有json_reader.cpp,json_value.cpp,json_writer.cpp,
其中:
json_value.cpp用来定义jsoncpp可以使用的类型,大概有
json_reader.cpp 主要用于将json串解析到json_value
json_writer.cpp 主要用于将字符串转换为json串
一、使用Jsoncpp解析Json串
Json串
示例:{"strjson":"jsonTest","address":"sea","array":[{"Test1":"Json1"},{"Test2":"Json2"},{"Test3":"Json3"}]};
可以看见,上面的json串包含两种结构的json串,对象类型和数组类型。
解析代码:
<pre name="code" class="cpp">#include <iostream>
#include <string>
#include"json/json.h"
int main()
{ std::string strJson = "{ \"strjson\":\"jsonTest\", \"address\" : \"sea\", \"array\" : [{\"Test1\":\"Json1\"}, {\"Test2\":\"Json2\" }, { \"Test3\":\"Json3\" }] }";Json::Reader reader;Json::Value valueType1;//将strJson放至value区进行处理if (reader.parse(strJson, valueType1)){//第一种结构,对象类型,可以直接按键值获得关键值std::string out = valueType1["strjson"].asString();std::cout << out << std::endl;//第二种结构被还包含在第一种结构中,由第一种结构获取//第二种结构只能按照迭代器来获取Json::Value valueType2 = valueType1["array"];for (int i = 0; i < valueType2.size(); i++){std::cout << valueType2[i]["Test3"].asString()<<std::endl;std::cout << valueType2[i]["Test2"].asString() << std::endl;}}getchar();return 0;}
二、使用Jsoncpp生成Json串
代码示例:
<pre name="code" class="cpp">{Json::Value root;Json::Value arrayObj;Json::Value item;//创建一个对象item["Test1"] = "Json1";item["Test2"] = "Json2";item["Test3"] = "Json3";root["strJson"] = "jsonTest";root["address"] = "sea";arrayObj.append(item);//item对象被作为值放入arrayObj中root["array"] = arrayObj;//将json转换为字符串root.toStyledString();std::cout << root << std::endl;getchar();return 0;}
运行结果如下: