boost构造,解析json
void asynDBCenter::isGetActorInfoEx(void* on_process, const char* arg)
{
std::stringstream ros(arg);
boost::property_tree::ptree pt;
boost::property_tree::read_json(ros, pt);
int actorID = pt.get<int>("actorID"); ActorInfoEx info={};
bool ret = m_dbcenter->getActorInfoEx(actorID, &info); std::stringstream wos;
boost::property_tree::ptree root,child_eq, child_kep;
root.put<bool>("ret", ret);
if(ret)
{
root.put<int>("_id", info.actor.id);
root.put<std::string>("name", info.actor.name);
root.put<int>("sex", info.actor.sex);
root.put<int>("prof", info.actor.prof);
root.put<int>("uid", info.uid);
root.put<int>("gold", info.gold);
root.put<int>("map", info.map);
root.put<int>("cur_hp", info.stat.cur_hp);
root.put<int>("max_hp", info.stat.max_hp);
root.put<int>("cur_mp", info.stat.cur_mp);
root.put<int>("max_mp", info.stat.max_mp);
root.put<int>("x", info.pos.x);
root.put<int>("y", info.pos.y);
root.put<int>("level", info.level);
root.put<int>("neq", info.neq);
//插入"":{"":"",
// "":""}
//形式的json
for(int i = ; i < info.neq; ++i)
{
char str[] = {};
sprintf(str, "epos%02d", i);
child_eq.put<int>(str, info.eqs[i]);
}
root.put_child("eqs", child_eq);
//插入"":[
// {"":""},
// {"",""}
// ]数组类型的文档
for (auto kk:info.vctKk)
{
boost::property_tree::ptree child;
child.put<int>("id", kk.eid);
child.put<int>("pos_x", kk.epos.x);
child.put<int>("pos_y", kk.epos.y);
child_kep.push_back(std::make_pair("", child));
}
root.put_child("keqs",child_kep);
}
boost::property_tree::write_json(wos, root); HrPkt pkt;
pkt.hr = wos.str();
pkt.on_process = on_process;
pkt.process = std::bind(&asynDBCenter::onGetActorInfoEx, this, std::placeholders::_1, std::placeholders::_2);
push_hr(pkt);
}
针对上面构造的进行解析
void asynDBCenter::onGetActorInfoEx(void* on_process, const char* arg)
{
std::stringstream os(arg);
boost::property_tree::ptree root;
boost::property_tree::read_json(os, root);
ActorInfoEx actEx={};
bool ret = root.get<bool>("ret");
if(ret)
{
actEx.actor.id = root.get<int>("_id");
strcpy(actEx.actor.name, root.get<std::string>("name").c_str());
actEx.actor.sex = (DB::sex)root.get<int>("sex");
actEx.actor.prof = (RoleProf)root.get<int>("prof");
actEx.uid = root.get<int>("uid");
actEx.gold = root.get<int>("gold");
actEx.map = root.get<int>("map");
actEx.stat.cur_hp = root.get<int>("cur_hp");
actEx.stat.max_hp = root.get<int>("max_hp");
actEx.stat.cur_mp = root.get<int>("cur_hp");
actEx.stat.max_mp = root.get<int>("max_mp");
actEx.pos.x = root.get<int>("x");
actEx.pos.y = root.get<int>("y");
actEx.level = root.get<int>("level");
actEx.neq = root.get<int>("neq");
auto child = root.get_child("eqs");
int i = ;
//遍历里面的记录
for(auto it : child)
{
actEx.eqs[i++] = it.second.get_value<int>();
if(i >= MAX_EQ_NUMB)
break;
}
auto arr = root.get_child("keqs");
//遍历数组中的文档
for (auto it:arr)
{
KnapsackEq kk = {};
kk.eid = it.second.get<int>("id");
kk.epos.x = it.second.get<int>("pos_x");
kk.epos.y = it.second.get<int>("pos_y");
actEx.vctKk.push_back(kk);
}
}
auto on_getActorInfoEx = *(std::function<void(bool, ActorInfoEx) >*)on_process;
on_getActorInfoEx(ret, actEx);
}
boost::property_tree::ptree感觉就像是一个树,每个节点有key,value,不是二叉树,value又可以指向下面的节点。
put_child:只有当是文档对象或者数组时才使用(好像)
boost构造,解析json的更多相关文章
- Boost property_tree解析json
使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解一
一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.js ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- JSON构造/解析(by C)---cJSON和json-c
背景 JSON即JavaScript Object Notation,是一种轻量级的数据交换格式. JSON建构于两种结构: "名称/值"对的集合(A collection of ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- C++构造和解析JSON
JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点,问问度娘,优点一箩筐. 第三方库 json解析选用j ...
- Android异步加载访问网络图片-解析json
来自:http://www.imooc.com/video/7871 推荐大家去学习这个视频,讲解的很不错. 慕课网提供了一个json网址可以用来学习:http://www.imooc.com/api ...
随机推荐
- 语义化的html结构的好处
HTML是提供网页文档内容的上下文结构和含义:html本身是没有表现的,我们看到例如<h1>是粗体,字体大小2em,加粗:<strong>是加粗的,不要认为这是html的表现, ...
- 【转】【Asp.Net】Asp.net发送邮件的两种方法小结
这几天看了一下Asp.net发送邮件方面的东西,记得之前的IIS6上有SMTP服务器,可以直接利用这个进行邮件发送,现在的开发环境是Windows 7,找了半天没有找到,到网络上查了才知道原来wind ...
- 那些OVER的封装
什么over什么,如pppoe, ppp的封装都在over对象之后,入下图: PPPOE Ipsec
- How to configure SRTM elevations in WorldWind WMS
In this thread I will try to explain how to serve SRTM elevations using NASA WorldWind WMS. ! Import ...
- C++ 栈的基本操作
// zhan.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namesp ...
- CentOS 6.5系统安装配置图解教程
说明: 截止目前CentOS 6.x最新版本为CentOS 6.5,下面介绍CentOS 6.5的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 6.5 64位 IP地址:192.16 ...
- livewriter写Blog 神秘失踪?
现在习惯用livewriter来总结/记录一些知识并发布为Blog 与同行交流,但是今天发生了一个怪事,上午我整理了两篇文档当时就用livewriter发送到了Blog上,但是晚上来看的时候之前发送的 ...
- Gradle tip #1: tasks
With this post I would like to start series of Gradle-related topics I wish I knew when I first star ...
- IOS开发之——保存图片到相册的功能实现
//保存 UIButton *saveBtn = [[UIButton alloc] init]; // saveBtn.frame = CGRectMake((screenWi ...
- 20145208 《Java程序设计》第8周学习总结
20145208 <Java程序设计>第8周学习总结 教材学习内容总结 NIO与NIO2 NIO与IO的区别 IO NIO 面向流 面向缓冲 阻 ...