因为工作需要,需要对一段嵌套的json进行解析。其中我使用的开发语言是C++。

由于rapidjson的解析效率高效,所以今天研究了下RapidJson,下面是一段我用RapidJson解析的一段具有嵌套数组的json文本代码。

JSON文本如下:

{

"Info": [

{

"lots": 10,

"order_algorithm": "01",

"buy_close": 9000,

"spread_shift": 0,

"position_b_sell": 0,

"position_a_buy_today": 0,

"position_a_buy_yesterday": 0,

"sell_open": -9000,

"list_instrument_id": [

"rb1705",

"rb1701"

],

"position_b_buy_today": 0,

"buy_open": -9000,

"position_a_sell_yesterday": 0,

"strategy_id": "02",

"position_b_buy": 0,

"a_wait_price_tick": 1,

"trade_model": "boll_reversion",

"b_wait_price_tick": 0,

"sell_close": 9000,

"only_close": 0,

"order_action_limit": 400,

"is_active": 1,

"lots_batch": 1,

"position_a_sell": 0,

"position_b_buy_yesterday": 0,

"user_id": "063802",

"position_a_buy": 0,

"trader_id": "1601",

"position_a_sell_today": 0,

"stop_loss": 0,

"position_b_sell_today": 0,

"position_b_sell_yesterday": 0,

"on_off": 0

},

{

"lots": 10,

"order_algorithm": "01",

"buy_close": 9000,

"spread_shift": 0,

"position_b_sell": 0,

"position_a_buy_today": 0,

"position_a_buy_yesterday": 0,

"sell_open": -9000,

"list_instrument_id": [

"ni1705",

"ni1701"

],

"position_b_buy_today": 0,

"buy_open": -9000,

"position_a_sell_yesterday": 0,

"strategy_id": "01",

"position_b_buy": 0,

"a_wait_price_tick": 1,

"trade_model": "boll_reversion",

"b_wait_price_tick": 0,

"sell_close": 9000,

"only_close": 0,

"order_action_limit": 400,

"is_active": 1,

"lots_batch": 1,

"position_a_sell": 0,

"position_b_buy_yesterday": 0,

"user_id": "063802",

"position_a_buy": 0,

"trader_id": "1601",

"position_a_sell_today": 0,

"stop_loss": 0,

"position_b_sell_today": 0,

"position_b_sell_yesterday": 0,

"on_off": 0

}

],

"MsgSendFlag": 0,

"MsgErrorReason": "ID or password error",

"MsgRef": 1,

"MsgType": 3,

"MsgResult": 0

}

解析其格式的C++代码如下,我只解析关键部分,其余读者可以自行添加。

#include "rapidjson/document.h"

#include "rapidjson/writer.h"

#include "rapidjson/stringbuffer.h"

#include

using namespace rapidjson;

int main() {

// 1. Parse a JSON string into DOM.

const char* json ="{\"Info\":[{\"lots\":10,\"order_algorithm\":\"01\",\"buy_close\":9000,\"spread_shift\":0,\"position_b_sell\":0,\"position_a_buy_today\":0,\"position_a_buy_yesterday\":0,\"sell_open\":-9000,\"list_instrument_id\":[\"rb1705\",\"rb1701\"],\"position_b_buy_today\":0,\"buy_open\":-9000,\"position_a_sell_yesterday\":0,\"strategy_id\":\"02\",\"position_b_buy\":0,\"a_wait_price_tick\":1,\"trade_model\":\"boll_reversion\",\"b_wait_price_tick\":0,\"sell_close\":9000,\"only_close\":0,\"order_action_limit\":400,\"is_active\":1,\"lots_batch\":1,\"position_a_sell\":0,\"position_b_buy_yesterday\":0,\"user_id\":\"063802\",\"position_a_buy\":0,\"trader_id\":\"1601\",\"position_a_sell_today\":0,\"stop_loss\":0,\"position_b_sell_today\":0,\"position_b_sell_yesterday\":0,\"on_off\":0},{\"lots\":20,\"order_algorithm\":\"02\",\"buy_close\":9000,\"spread_shift\":0,\"position_b_sell\":0,\"position_a_buy_today\":0,\"position_a_buy_yesterday\":0,\"sell_open\":-9000,\"list_instrument_id\":[\"ni1705\",\"ni1701\"],\"position_b_buy_today\":0,\"buy_open\":-9000,\"position_a_sell_yesterday\":0,\"strategy_id\":\"01\",\"position_b_buy\":0,\"a_wait_price_tick\":1,\"trade_model\":\"boll_reversion\",\"b_wait_price_tick\":0,\"sell_close\":9000,\"only_close\":0,\"order_action_limit\":400,\"is_active\":1,\"lots_batch\":1,\"position_a_sell\":0,\"position_b_buy_yesterday\":0,\"user_id\":\"063802\",\"position_a_buy\":0,\"trader_id\":\"1601\",\"position_a_sell_today\":0,\"stop_loss\":0,\"position_b_sell_today\":0,\"position_b_sell_yesterday\":0,\"on_off\":0}],\"MsgSendFlag\":0,\"MsgErrorReason\":\"IDorpassworderror\",\"MsgRef\":1,\"MsgType\":3,\"MsgResult\":0}";

//std::cout << json << std::endl;

//std::cout << "\n" << std::endl;

std::cout << "|==================|" << std::endl;

std::cout << "||rapidjson output||" << std::endl;

std::cout << "|==================|" << std::endl;

Document doc;

doc.Parse(json);

// 2. Modify it by DOM.

Value& s = doc["MsgSendFlag"];

s.SetInt(s.GetInt() + 1);

Value& infoArray = doc["Info"];

if (infoArray.IsArray()) {

for (int i = 0; i < infoArray.Size(); i++) {

const Value& object = infoArray[i];

int lots = object["lots"].GetInt();

std::string order_algorithm = object["order_algorithm"].GetString();

std::cout << "int lots = " << lots << std::endl;

std::cout << "string order_algorithm = " << order_algorithm << std::endl;

const Value& info_object = object["list_instrument_id"];

if (info_object.IsArray()) {

for (int j = 0; j < info_object.Size(); j++) {

std::string instrument = info_object[j].GetString();

std::cout << "instrument[" << j << "] = " << instrument << std::endl;

}

}

}

}

// 3. Stringify the DOM

StringBuffer buffer;

Writer writer(buffer);

doc.Accept(writer);

std::cout << buffer.GetString() << std::endl;

return 0;

}

运行结果如下:

参考:http://stackoverflow.com/questions/23170718/rapidjson-get-a-value-inside-an-array-of-another-array

http://www.cnblogs.com/ziyouchutuwenwu/p/3790322.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

|2|left

打赏

微信扫一扫,打赏作者吧~

rapidjson 嵌套json_[整理][RapidJson用法1]C++之RapidJson解析嵌套数组json | 勤奋的小青蛙...相关推荐

  1. rapidjson 嵌套json_[整理][RapidJson用法2]C++之RapidJson创建嵌套数组json | 勤奋的小青蛙...

    上篇博文里我通过RapidJson解析了嵌套的json文本,那么本文章是RapidJson创建嵌套数组Json文本. 代码: #include "rapidjson/document.h&q ...

  2. python用psf函数_Python 嵌套函数(高级用法)

    Python 嵌套函数(高级用法) 一.嵌套函数(高级用法) 1.嵌套函数 函数的嵌套调用是在"函数调用中再调用其他函数".也就是说:函数嵌套允许在一个函数中调用另外一个函数.如下 ...

  3. iframe标签中写html代码,Iframe嵌套HTML网页的用法?

    iframe嵌入网页的用法 iframe并不是很常用的,在标准的网页中非常少用.但是有朋友经常问到,下面我简单地介绍一下它的用法,你只要熟练掌握这些参数足矣. 也应该是框架的一种形式,它与不 ...

  4. php的内置函数strrpos_PHP函数用法详解【初始化、嵌套、内置函数等】

    本文实例讲述了PHP函数用法.分享给大家供大家参考,具体如下: 初始函数 函数:封装一段用于完成特定功能的代码. 通俗理解函数:可以完成魔鬼工作的代码块,就像积木一样,可以反复使用,在使用的时候,拿来 ...

  5. for循环嵌套的两种用法

    主要有两种类型的for循环嵌套,下面来介绍这两种类型循环嵌套的用法以及事例. 一:内外循环独立进行 #include<stdio.h> void main(){int i,j;char a ...

  6. android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android

    我只是试图让存储在我的JSON文件中的值,并将其保存到SQLite数据库:解析嵌套的JSON对象,并存储在数据库中的Android 这是我的JSON文件: { "list": { ...

  7. requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式...

    1.关于三种 Content-Type multipart/form-data 请求中既可以携带文件,又可以携带参数.其中参数以键值对的方式传递,参数之间.参数与文件之间以 content-dispo ...

  8. SpringCloud工作笔记047---FastJson解析多级JSON_FastJson解析嵌套JSON_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

    JAVA技术交流QQ群:170933152 解析嵌套json,这里说一下: //下面可以通过解析多级json的方式,获取数据,插入到数据库 //JSONObject userJsonObj = JSO ...

  9. golang解析嵌套yaml配置(局部解析)

    golang中解析yaml配置文件 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Ra ...

最新文章

  1. Python:matplotlib绘图时指定图像大小,放大图像
  2. 智能安防赛道上 国产AI芯片力挫群雄
  3. mysql数据库优化的作用_MySQL数据库优化总结
  4. 为什么6lowpan 要有四个地址_为什么你打玻尿酸,能被人一眼看出来?这四个地方要谨慎注射!...
  5. 一个文科小白的数据分析师之路
  6. 山石网科-Hillstone-L2TP-***之配置终结篇
  7. Kraker:分布式密码爆破系统
  8. 关于清除丢失贴图与IES文件
  9. protel dxp 2004教程:如何自己创建原理图符号与元器件封装
  10. 通过修改window本地hosts文件修改域名指向
  11. SAP WORKFLOW 1创建一个简单的workflow helloworld
  12. 熊猫浏览器panda发布了!Enjoy it ! download! http://redpandas.cn or http://redpanda.sourceforge.net
  13. 益丰大药房互联网医院,积极推动中国大健康产业发展变革
  14. Android 利用Intent启动另一个app应用时,一个崩溃的问题
  15. http基本请求头详解
  16. 编程中的匈牙利命名法
  17. 【计算机毕业设计】248高校奖学金管理系统
  18. 九日集训 总结与展望
  19. autocad 2021 mac中文版
  20. python rot13解密_牛刀小试——Python 2.7下的rot13编码与解码

热门文章

  1. linux简述什么是shell,【Linux小知识】什么是shell?
  2. 使用python的requests+bs4 实现京东的手机商品数据收集
  3. 【RDMA】RDMA 学习资料总目录
  4. 微众银行年营收270亿:净利69亿 利润碾压网商银行
  5. viper4android fx6.0,ViPer4android. FX顶级音效!
  6. android cmd命令行删除文件夹,文件
  7. 数据库查询中的in语句
  8. 介绍几款实用的MySQL和数据库Web客户端
  9. tp5 实现文章上一篇和下一篇翻页
  10. 《观远数据安全白皮书》首发,打开数据安全保护新思路