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的更多相关文章

  1. Boost property_tree解析json

    使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...

  2. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  3. Java构造和解析Json数据的两种方法详解一

    一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.js ...

  4. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  5. JSON构造/解析(by C)---cJSON和json-c

    背景 JSON即JavaScript Object Notation,是一种轻量级的数据交换格式. JSON建构于两种结构: "名称/值"对的集合(A collection of ...

  6. Java构造和解析Json数据的两种方法详解二——org.json

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...

  7. Java构造和解析Json数据的两种方法详解一——json-lib

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...

  8. C++构造和解析JSON

    JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点,问问度娘,优点一箩筐. 第三方库 json解析选用j ...

  9. Android异步加载访问网络图片-解析json

    来自:http://www.imooc.com/video/7871 推荐大家去学习这个视频,讲解的很不错. 慕课网提供了一个json网址可以用来学习:http://www.imooc.com/api ...

随机推荐

  1. Content Factory:辅助 MonoGame 游戏开发

    Content Factory 是一款辅助 MonoGame 游戏开发的工具.它提供素材管理的多项功能,包括编译素材.编辑自定义数据等,并能同时应用多个游戏平台. 项目设置 选择要创建游戏项目的平台, ...

  2. 华为DHCP-重要

    近日遇到遇到控制器和wac对接的一些问题.尤其是地址池这块排查起来比较费事,且这些命令不容易找到,以下是能经常用到的命令. 1,查看ip是否冲突: (看下conflict字段) 2,防止冲突命令:   ...

  3. [转]的C#实现三维数字地形漫游(基于Irrlicht)

    马省轩  任丽娜 摘  要:本文采用C#编程语言,利用Irrlicht三维图形引擎实现了三维数字地形的漫游.为三维数字地形显示提供了较易实现的解决方案. 关键词:C#   高度图 Irrlicht引擎 ...

  4. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01

    注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...

  5. python 遗传算法精简版

    精简版遗传算法,算法中仅采用变异算子而没有使用交叉算子,但是进化依然很有效 from string import ascii_lowercase from random import choice, ...

  6. ThinkPHP项目CMS内容管理系统开发视频教程【20课】(3.02GB)

    ThinkPHP背景介绍:     ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业级应用开发而诞生的. ...

  7. JS判断输入是否为整数和数字的正则表达式

    "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0+))$" ...

  8. #Linux学习笔记# Linux文件的所有者、群组和其他人

    1.关于所有者.群组和其他人 在Linux系统中,每个文件都具有User.Group和Others三种身份的权限配置.那这三种身份分别表示什么意思呢?配置这三种身份的权限有啥意义呢? (1)文件所有者 ...

  9. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  10. offsetWidth与scrollLeft

    有两个值一个是:scrollTop一个是scrollLeft第一个代表页面利用滚动条滚动到下方时,隐藏在滚动条上方的页面的高度:第二个代表页面利用滚动条滚动到右侧时,隐藏在滚动条左侧的页面的宽度 do ...