先附上以上工程的源码地址:
https://github.com/jeremy505/jasoncpp-examples/blob/master/string_parse.cpp
先来看看string_parse.cpp,使用json数据格式创建了个人信息,包括索引、姓名,年龄,居住地以及电话号码,如下所示:
这段json数据在string_parse.cpp是使用的字符串表示的,然后解析,可以获取对应的键值对,代码如下:(string_parse.cpp)
#include <iostream>
#include "./json/json.h"
using namespace std;
int main(void)
{
string message = "{ \"Personal-details\" : \
{\"Name\" : \"jeremy\",\
\"Age\" : 20,\
\"Live-City\": \"Shanghai\",\
\"Phone-Number\" : \
{\"1\" : \"123456789\",\
\"2\":\"987654321\"},\
\"Index\":1}\
}";
Json::CharReaderBuilder rbuilder;
Json::CharReader* reader = rbuilder.newCharReader();
rbuilder["collectcomments"] = false;
Json::Value root;
JSONCPP_STRING errs;
bool parse_ok = reader->parse(message.c_str(),message.c_str() + message.length(), &root, &errs);
if(!parse_ok)
{
cout << "Parse json string error!" << endl;
}
else
{
cout << "Printf jeremy's information:" << endl;
cout << root.toStyledString() << endl;
try{
cout << "Personal-details:Name=" << root["Personal-details"]["Name"]<< endl;
cout << "Personal-details:Age=" << root["Personal-details"]["Age"]<< endl;
cout << "Personal-details:Live-City=" << root["Personal-details"]["Live-City"]<< endl;
cout << "Personal-details:Phone-Number=" << root["Personal-details"]["Phone-Number"]<< endl;
cout << "Personal-details:Phone-Number:1=" << root["Personal-details"]["Phone-Number"]["1"]<< endl;
cout << "Personal-details:Phone-Number:2=" << root["Personal-details"]["Phone-Number"]["2"]<< endl;
cout << "Personal-details:Index=" << root["Personal-details"]["Index"]<< endl;
}catch(const Json::LogicError &ex)
{
cout << "Parse json string error!" << endl;
}
}
Json::Value root_temp;
root_temp["Personal-details"]["Age"] = 23;
root_temp["Personal-details"]["Name"] = "Eva";
root_temp["Personal-details"]["Live-City"] = "Wuhan";
root_temp["Personal-details"]["Phone-Number"]["1"] = "222222222";
root_temp["Personal-details"]["Phone-Number"]["2"] = "111111111";
root_temp["Personal-details"]["Index"] = 2;
cout << "Add Eva's information:" << endl;
cout << root_temp.toStyledString() << endl;
Json::Value root_group;
cout << "Add jeremy and Eva together:" << endl;
root_group["Personal-details"][0]["Age"] = 20;
root_group["Personal-details"][0]["Name"] = "jeremy";
root_group["Personal-details"][0]["Live-City"] = "Shanghai";
root_group["Personal-details"][0]["Phone-Number"]["1"] = "123456789";
root_group["Personal-details"][0]["Phone-Number"]["2"] = "987654321";
root_group["Personal-details"][0]["Index"] = 1;
root_group["Personal-details"][1]["Age"] = 23;
root_group["Personal-details"][1]["Name"] = "Eva";
root_group["Personal-details"][1]["Live-City"] = "Wuhan";
root_group["Personal-details"][1]["Phone-Number"]["1"] = "222222222";
root_group["Personal-details"][1]["Phone-Number"]["2"] = "111111111";
root_group["Personal-details"][1]["Index"] = 2;
cout << root_group.toStyledString() << endl;
return 0;
}
以上程序显示打印字符串形式的json数据,然后解析:
接下来创建新的个人信息——Eva,如下:
如果要创建不止一个人的信息,也是很容易的,程序最后创建了jeremy和Eva的个人信息,如下:
以上例子基本上对json数据的解析以及创建做了说明,可以看见使用jsoncpp处理json数据很类似数组的操作,只不过索引是字符串,基本上掌握jsoncpp的使用,处理json数据就很简单了。