利用BOOST,解释JSON
来源:互联网 发布:淘宝网买家地域解读 编辑:程序博客网 时间:2024/05/29 18:57
首先从最简单的JSON脚本开始;
假设JSON脚本是:{"userId":"123456","userName":"Alex","company":"HugenessHard"}
这可能是最简单的JSON脚本,再简单就没办法说明问题了。
注:C++中双引号需加入转意符
#include <iostream>#include <boost/property_tree/ptree.hpp>#include <boost/property_tree/json_parser.hpp>#include <string>int main(int argc, char** argv){//NO.1 {"userId":"123456","userName":"Alex","company":"HugenessHard"}using namespace std;using namespace boost;using namespace boost::property_tree;ptree pt;string strJson = "{\"userId\":\"123456\",\"userName\":\"Alex\",\"company\":\"HugenessHard\"}";stringstream stream;stream << strJson;read_json(stream, pt);try{cout << "UserId:" << pt.get<string>("userId") << endl;cout << "UserName:" << pt.get<string>("userName") << endl;cout << "UserCompany:" << pt.get<string>("company") << endl;}catch (std::exception ex){cout << ex.what();}cin.get();return 0;}
输出结果:
UserId:123456
UserName:Alex
UserCompany:HugenessHard
--------------------------完美分割-----------------------------
假设上面的JSON脚本再加个子窜,client
JSON脚本将是:{"userId":"123456","userName":"Alex","company":"HugenessHard","client":[{"clientId":"1111","cname":"Mike","company":"Mikecompany"},{"clientId":"1111","cname":"Jack","company":"Jackcompany"}]}
注:为了简化程序,我就不加try/catch块了,现实中应catch异常,以防读取不存在的节点。
#include <iostream>#include <boost/property_tree/ptree.hpp>#include <boost/property_tree/json_parser.hpp>#include <string>int main(int argc, char** argv){//NO.2 {"userId":"123456","userName":"Alex","company":"HugenessHard","client":[{"clientId":"Mike","company":"Mikecompany"},{"clientId":"Jack","company":"Jackcompany"}]}using namespace std;using namespace boost;using namespace boost::property_tree;ptree pt, pt2;string strJson = "{\"userId\":\"123456\",\"userName\":\"Alex\",\"company\":\"HugenessHard\",\"client\":[{\"clientId\":\"1111\",\"cname\":\"Mike\",\"company\":\"Mikecompany\"},{\"clientId\":\"2222\",\"cname\":\"Jack\",\"company\":\"Jackcompany\"}]}";stringstream stream;stream << strJson;read_json(stream, pt);cout << "UserId:" << pt.get<string>("userId") << endl;cout << "UserName:" << pt.get<string>("userName") << endl;cout << "UserCompany:" << pt.get<string>("company") << endl;pt2 = pt.get_child("client");cout << "----Client----" << endl;for (ptree::iterator it = pt2.begin(); it != pt2.end(); ++it){cout << "ClientId:" << it->second.get<string>("clientId") << endl;cout << "ClientName:" << it->second.get<string>("cname") << endl;cout << "ClientCompany:" << it->second.get<string>("company") << endl;}cin.get();return 0;}输出结果:
UserId:123456
UserName:Alex
UserCompany:HugenessHard
----Client----ClientId:1111
ClientName:Mike
ClientCompany:Mikecompany
ClientId:2222
ClientName:Jack
ClientCompany:Jackcompany
总结:
ptree以JSON中的一对大括号为界为一个ptree对象
ptree的JSON对象中同样可以包括子对象,如例中的client节点,就是个子对象
client节点中存有2个客户信息。就需要用ptree的迭代器ptree::iterator,逐个读取子对象。
在读取节点时,应使和try块捕获异常。例如我们读取不存在的节点“age”
则会抛出异常 “No such node (age)”
另外,如果需要用宽字符集,可直接用wstring,wstringstream,wptree分别代替(类型名前加w)
- 利用BOOST,解释JSON
- JSON 解释
- Boost解析JSON格式
- boost 访问JSON
- boost 字符串,json
- Boost之Json解析
- BOOST JSON 数组解析
- boost解析json文件
- boost库 json解析
- C++ Boost 解析JSON
- C++ boost 解析 Json
- C#解释json
- json具体事例解释
- android JSON 解释实例
- C#解释Json格式文件
- JSON 代码,解释,转换
- Json格式解释
- json的解释
- 指针的介绍
- Android Activity之间传递对象及对象数组
- Java教程例题3.2
- 属性之get,set
- JAVA 命令行运行java项目
- 利用BOOST,解释JSON
- 自定义泛型类型和方法
- Leetcode_257_Binary Tree Paths
- 【2015/10/25】C 学习日志_Day10 运算符
- 网站外部链接(读书笔记)
- 线段树+离散化操作(poj 2528)
- editplus生成页面框架
- svg动画的学习相关
- Android Scrollview+Listview 实现不同条目点赞并计数功能及原理分析(2)