使用jsoncpp解析json数据(二)

先附上以上工程的源码地址:
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数据就很简单了。

猜你喜欢

转载自blog.csdn.net/weixin_38134600/article/details/82826753