boost json生成和解析用法
json c++库还是有很多的,因为工作上经常使用boost,这里选用boost的json,记录下用法。
举个栗子:
如果我们要生成如下格式的json:
{
"name":"jim",
"info":
{
"weight":"",
"all_phone":
[
{
"phone":""
},
{
"phone":""
}
]
}
}
解析和生成的示例代码如下
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
#include <vector>
using namespace boost::property_tree;
using namespace std;
bool CreateJson(wstring &wstr)
{
wstringstream wstream;
try
{
wptree pt;
pt.put(L"name",L"jim");
wptree info;
info.put(L"weight",L"");
wptree phone,phone_item1,phone_item2;
phone_item1.put(L"phone",L"");
phone_item2.put(L"phone",L"");
phone.push_back(make_pair(L"",phone_item1));
phone.push_back(make_pair(L"",phone_item2));
info.put_child(L"all_phone",phone);
pt.push_back(make_pair(L"info",info));
write_json(wstream,pt); }
catch(ptree_error pt)
{
pt.what();
return false;
}
wstr = wstream.str();
return true;
}
bool ParseJson(wstring &wstr)
{
try
{
wptree pt;
wstringstream wstream(wstr);
read_json(wstream,pt);
wstring wstrName = pt.get<wstring>(L"name");
wptree info = pt.get_child(L"info");
wstring weight = info.get<wstring>(L"weight");
int w=;
w=info.get<int>(L"weight");
wptree phones = info.get_child(L"all_phone");
vector<wstring>vcPhone;
BOOST_FOREACH(wptree::value_type &v,phones)
{
vcPhone.push_back(v.second.get<wstring>(L"phone"));
}
}
catch(ptree_error pt)
{
pt.what();
return false;
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
wstring wstr;
CreateJson(wstr);
ParseJson(wstr);
return ;
}
用法还是很简单的
这里需要注意的是:
1 boost json不支持空数组,在本例中空数组对应的格式为"all_phone":"";
2 空的字符串字段转换为数字会抛异常。
boost json生成和解析用法的更多相关文章
- Android Json生成及解析实例
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST
Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...
- Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- 【转载】Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- Json生成与解析
JSON常用与服务器进行数据交互,JSON中"{}"表示JSONObject,"[]"表示JSONArray 如下json数据: {"singers& ...
- delphi c++builder JSON 生成与解析 例子
json,System.JSON,REST.JSON JSON有两种数据结构,对象和数组. 对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...} 数组 ...
- fastjson生成和解析json数据,序列化和反序列化数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- fastjson生成和解析json数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- Boost.JSON Boost的JSON解析库(1.75首发)
目录 目录 Boost的1.75版本新库 JSON库简介 JSON的简单使用 编码 最通用的方法 使用std::initializer_list json对象的输出 两种对比 解码 简单的解码 增加错 ...
随机推荐
- linux共享内存简析
共享内存是IPC的一种机制,允许两个不相关的进程共享同一块内存 //共享内存可以双向通信,但其本身没有相应机制,需要程序编写者设计,本例为单向通信(分为读端和写端). 共享内存读端: #include ...
- 启动监听报错:TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection closed Linux Error: 29: Illegal seek
启动监听程序报错: 说明:在rhel5.8上安装完成oracle11g数据库后,使用netca创建完监听,启动监听时报错.还未使用dbca创建实例. [oracle@rusky-oracle11g ~ ...
- java之方法覆盖的坑
昨天写了个小例子,覆盖hashCode.equals进行集合set的一些特性测试,代码如下: class Test3 { public int c; public Test3(int c) {this ...
- Linux下 静态链接库 和 动态链接库
先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特 ...
- VASP 软件在ubuntu10.04下的安装过程
开始三步按照http://www.cnblogs.com/baby-lee进行. 安装完intel fortran composer后,需要把ifort命令写进.bashrc文件. 4.添加ifort ...
- ajax查询数据的举例
1.根据下拉框的值异步查询信息 HTML代码如下: <script> $(function(){ //页面载入时执行 $("#key").change(function ...
- C语言入门(18)——数组与字符串
用来存放字符量的数组称为字符数组.字符串可以看作一个数组,它的元素是字符型的. 字符数组的定义 形式与前面介绍的数值数组相同.例如: char c[10]; 由于字符型和整型通用,也可以定义为int ...
- 【Spring MVC系列】--(4)返回JSON
[Spring MVC系列]--(4)返回JSON 摘要:本文主要介绍如何在控制器中将数据生成JSON格式并返回 1.导入包 (1)spring mvc 3.0不需要任何其他配置,添加一个jackso ...
- scp的使用
scp有两种版本 一种是ma的 直接使用scp命令 一种是winscp类似ftp mac版的scp命令格式如下: scp ./xxx.tar.gz root@ip: /root/xxx 这句话的意思是 ...
- mysql中使用正则表达式时的注意事项
mysql不支持\d元字符匹配数字 mysql不支持向前.向后查找 regexp不能和not搭配使用