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 ...
随机推荐
- Linux 网络编程六(socket通信UDP版)
//udp接收消息 #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...
- SpringMVC视图解析器(转)
前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视图解析器.当我们对SpringMVC控制的资源发起请求时,这些请求都会被Sprin ...
- Oracle11G安装之后
本人对oracle还处于摸索阶段,今天安装了一下Oracle11G, 安装之后,后台管理端的登录地址:https://172.16.10.75:1158/em 1.使用之前设置的dba管理员密码账号登 ...
- MSMQ消息队列安装
一.Windows 7安装.管理消息队列1.安装消息队列 执行用户必须要有本地 Administrators 组中的成员身份,或等效身份. 具体步骤: 开始—>控制面板—>程 ...
- [CareerCup] 1.3 Permutation String 字符串的排列
1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...
- 信息安全系统设计基础_exp2
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1353 姓名:吴子怡.郑伟 学号:20135313.20135322 指导教师: 娄嘉鹏 实验 ...
- 细说 Web API参数绑定和模型绑定
今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...
- JS开发HTML5游戏《神奇的六边形》(三)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- ASP.NET MVC Controller Session问题
发现问题 最近在项目中遇到这样一个问题,一直没办法重现,所以几天都没有解决. 测试那边给出的问题是这样的:每天早上来的时候,第一次通过单点登录到系统的时候,总会跳转回登录界面,再次登录就好了.当时给我 ...
- iOS开发小技巧--高斯模糊框架的应用
事件背景:彩票项目中点击检查更新之后的操作,高斯模糊效果并弹出HUD 注意:在应用别人的框架的时候,最好封装一下下. 新建一个类 继承自高斯模糊的类. 使用方法:新建一个高斯模糊类的View,添加到 ...