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串,对象类型和数组类型。
解析代码:
#include#include #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()<
二、使用Jsoncpp生成Json串
代码示例:
{ 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;}
运行结果如下: