项目地址:http://code.google.com/p/rapidjson/

上面有很详细的介绍:http://code.google.com/p/rapidjson/wiki/UserGuide

作者介绍说:" Rapidjsonis an attempt to create the fastest JSON parser and generator. "

这是一个试图创造出一个最快的json解析和生成项目 呵呵。

嘛也不说 通过一个例子来看看这个工具的好用之处。

[html] view plaincopy print?
  1. #include "rapidjson/document.h" // rapidjson's DOM-style API
  2. #include "rapidjson/prettywriter.h" // for stringify JSON
  3. #include "rapidjson/filestream.h"       // wrapper of C stream for prettywriter as output
  4. #include <cstdio>
  5. using namespace rapidjson;
  6. int main()
  7. {
  8. char json[100] = "{ \"hello\" : \"world\" }";
  9. rapidjson::Document d;
  10. d.Parse<0>(json);
  11. printf("%s\n", d["hello"].GetString());
  12. printf("%s\n", json);
  13. getchar();
  14. return 0;
  15. }

输出:

下面说说这个开源程序的几个特点:

优点:

1.依赖库很少,

2.轻量级

3.对于Dom模型层级关系表述的很清楚

缺点:

1。只支持标准的json格式,一些非标准的json格式不支持

2。缺少一些比较通用的接口,再解析的时候需要自己再封装一层,否则代码量将会很大。

举个例子:

Json数据

{ "hello" : "world","t" : true , "f" : false, "n": null,"i":123, "pi": 3.1416, "a":[1, 2, 3, 4] }

为了获取a中第三个元素的值就得进行如下的操作:

[html] view plaincopy print?
  1. int main()
  2. {
  3. //char json[100] = "{ \"hello\" : \"world\" }";
  4. const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
  5. rapidjson::Document d;
  6. d.Parse<0>(json);
  7. if (d.HasParseError())
  8. {
  9. printf("GetParseError %s\n",d.GetParseError());
  10. }
  11. if (d.HasMember("a"))//这个时候要保证d湿IsObject类型 最好是 if(d.Isobject() && d.HasMember("a"))
  12. {
  13. const Value &a=d["a"];
  14. if (a.IsArray() && a.Size() > 3)
  15. {
  16. const Value &a3=a[2];
  17. string stra3;
  18. ValueToString(a3, stra3);
  19. if (a3.IsInt())
  20. {
  21. printf("GetInt [%d] \n",a3.GetInt()); ;
  22. }
  23. }
  24. }
  25. getchar();
  26. return 0;
  27. }

可以看到为了获取一个二级的数据需要进行一层层的解析和类型判断,否则程序就会崩溃。

这里注意的一点HasMember 也必须是Isobject才能调用否则程序也会调用失败。

建议可以封装出以下几个接口:

int ValueToString(const Value &node ,string &strRet);

int ValueToLong(const Value &node ,long &lRet);

int GetChildNode(const Value &Pnode,vector<string> &listCfg, Value &ChildNode ) ;

int GetChildNode(const Value &Pnode,const intiArrSize, char[][32] &szArrCfg, Value &ChildNode ) ;

之类的接口。

 源码下载

不对之处敬请谅解~~ 欢迎交流~~~

推荐一款cpp解析json工具--rapidjson相关推荐

  1. 推荐一款截屏翻译工具|截屏提取文字|划词翻译

    推荐一款截屏翻译工具|截屏提取文字|划词翻译   大家有没有过这样的经历,搜索一篇阅读心得或者心得体会的时候,看到自己感兴趣的一篇文章,打算复制下来上交"任务"时,发现复制不了,连 ...

  2. php代码转换工具,推荐几款格式化工具以及代码转换工具

    推荐几款格式化工具以及代码转换工具 在我们日常工作开发中,大部分时间都是在写代码的过程中,或者在我们二次开发的过程中,很多时候我们都需要复制粘贴代码,但是有的时候当我们把代码粘贴到我们自己的编辑器中就 ...

  3. 推荐 9 个爱不释手的 JSON 工具

    JSON(JavaScript对象标注)是一种流行的轻量级数据交换格式,在网络上已很常见.众所周知,JSON让开发人员易于使用,又让机器易于解析和生成. JSON吸引了工具构建者的注意,它们开发了用于 ...

  4. 推荐 9 个 爱不释手的 JSON 工具!

    [51CTO.com快译]JSON(JavaScript对象标注)是一种流行的轻量级数据交换格式,在网络上已很常见.众所周知,JSON让开发人员易于使用,又让机器易于解析和生成. JSON吸引了工具构 ...

  5. Chrome解析JSON工具

    今天给大家推荐一个Chrome的一个解析JSON的工具(火狐也可以用) --JSON-handle Chrome浏览器到应用商店搜一下很容易找到(不过要翻墙 囧~~~~) 上图大家感受一下: 当然大家 ...

  6. 推荐2款在线制作简历工具,附简历大礼包

    点击上方"程序IT圈",选择"置顶公众号" 关键时刻,第一时间送达! 七月中旬了,很多大企都开始在秋招了,你是否已经准备好了,开始投递简历了.如果简历还没开始着 ...

  7. java最好用的json工具_推荐 9 个 爱不释手的 JSON 工具!

    Java技术栈 www.javastack.cn 关注优质文章 原文标题:JSON tools you don't want to miss 作者:Paul Krill,翻译:布加迪,出处:51CTO ...

  8. 推荐一款数据可视化分析工具

    当今时代数据分析的发展,导致数据可视化成为企业必不可少的一部分,进而市面上也就涌现出各种丰富多彩的工具.传统的Excel无疑是数据可视化工具的典型,我们平时经常使用Excel制作简单表格,简单.方便, ...

  9. 推荐一款超级下载利器工具,突破网盘的下载限制

    [回复"1024",送你一个特别推送] 目前随着网盘一步一步的关闭或者收费,目前能用的网盘已经不多了,百度网盘目前是为数不多的,暂时没有关闭或者收费的网盘.但是我们都知道,下载网盘 ...

最新文章

  1. Python+OpenCV实现AI人脸识别身份认证系统(2)—人脸数据采集、存储
  2. Influxdb1.2.2安装
  3. 一种生成不重复数的算法
  4. BCI competition IV 2b简介
  5. Cause: org.postgresql.util.PSQLException: ERROR: column province_id does not exist
  6. 实验一(高见老师收)
  7. MySQL 字符串转in/double类型——CAST/CONVERT函数的用法
  8. Netty是如何解决粘包和拆包问题的
  9. python paramiko并发_python学习笔记9--paramiko模块、多线程、锁机制
  10. ibatis java配置文件,ibatis学习-sqlMap.xml配置文件 | 学步园
  11. 45.国际化-选择使用资源文件
  12. SpringBoot日常游玩---当你需要在一个静态方法中使用一个带有其他@Autowried的实现类的时候怎么办
  13. Linux 下搭建 Kafka 环境
  14. 拯救期末!大四留学生发“论文机器人”,替你读文献给方向调格式,已被ACL2019收录
  15. 华为服务器bios系统,华为服务器bios设置
  16. Excel图表—超级好用的Bullet图(KPI考核图)
  17. 事业单位工资计算机公积金计算,事业单位住房公积金基数怎么算?
  18. 支付宝积分兑换的扫地机器人好用_如何选购扫地机器人?
  19. LINUX TC介绍
  20. C++函数模板和模板函数、类模板和模板类

热门文章

  1. Hive的安装-Hive配置
  2. 权限操作-springSecurity快速入门
  3. 部署eureka和config
  4. discuz php文件,discuz目录文件资料汇总
  5. kafka技术内幕(二)
  6. Nginx教程--配置
  7. mysql 光标的作用_Mysql那些事儿之(十四)光标的使用_MySQL
  8. 加载torchvision中预训练好的模型并修改默认下载路径
  9. java---随机小结
  10. Lidgren.Network – an introduction to networking in C# games