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;
}