使用rapidJson解析json文件

今天介绍如果如何使用rapidJson解析json文件~笔者之前也使用过json库,可惜搬到cocos2d-x使用过程出现问题...忘了什么问题,搞了很久解决不了,索性使用cocos2d-x自带的json解析库~

首先引入头文件#include "cocostudio/CocoStudio.h",因为从cocosStudio导入项目的时候会有json文件~

接着就是解析:

std::string filePath = FileUtils::getInstance()->fullPathForFilename("test.json");
std::string contentStr = FileUtils::getInstance()->getStringFromFile(filePath);

这里的contentStr其实就是Json文件中的字符串了,打个log看下吧~
接着解析数据_doc.Parse<0>(contentStr.c_str());,这里的_doc 是rapidjson::Document类, Json解析库的功能就是把json文件解析成类似map的类~(学过object-c的话就知道, 其实就是Dictionary啦, 总感觉是用C++在写oc,好别扭啊),然后就可以通过[下标]去取到相应的内容。 然后再根据rapidJson 库去取得相应的数据类型。 主要有:

GetInt(); GetString(); GetDouble(); GetBool(); GetInt64(); GetUint64();

了解以上方法之后,基本就能使用rapidJson解析json文件了。下面说说常见错误

  • Calling a private constructor of class 'rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>'
    原因可能是你传值的时候使用rapidjson::Value 当成函数参数传值的时候没有使用&引用,导致调用了private 的构造函数
  • 运行程序卡在const Ch* GetString()子类的代码
    原因可能是你的下标写错了
  • 运行程序卡在RAPIDJSON_ASSERT(IsObject());原因可能是你的_doc.Parse<0>()这里填的不是一个json文件的字符串,检查你的文件路径有没有错吧。。。

最后贴一个自己写的Demo
(请无视图片内容)
写了一个定时器,两秒钟后加载json数据,测试了获取字符串,数字,boolean等,我把rapidjson::value 当成参数传给button,优化代码结构 。
下载地址:http://download.csdn.net/detail/joueu/8231131

转载请注明出处:helkyle.tk

相关文章

  jsonp需要在页面中添加一个<script>元素,由该元素来从其他服务器加载json数据。 <body&g...
<script> var testApi = "地址"; $.ajax({ url:testApi,//可以不是本地域名 type:‘post...
总是有人会遇到跨域问题,然后有个jsonp的解决方案,MVC中代码如下: public class JsonpResult : Syst...
最近开发中遇到调用第三方web_api的功能,后端在处理json数据时使用fastjson来做反序列化,由于调用api...
JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp...
JsonSerializer有多个属性,用于自定义如何序列化JSON。这些也可以通过JsonSerializerSettings参数,在...