rapidjson使用总结
目录(?)[-]
rapidjson简介rapidjson是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。 rapidjson的性能是很出色的,其作者Milo Yipz做了28个C/C++ JSON库的评测,这个链接里有测试的结果截图。 rapidjson的另一个特点是对json的标准符合程度是100%的(在开启了full precision选项的情况下)。 这里是官方教程:rapidjson官方教程 这里是原作者对rapidjson代码的剖析:rapidjson代码剖析 我之前的项目使用的是jsoncpp,最近在把解析json的代码交叉编译到iOS设备的时候,偶尔会出现crash的情况。虽然经过检查是代码写的有问题,不是jsoncpp的问题,在解决问题过程中尝试了rapidjson这个库,并顺便对比了一下jsoncpp和rapidjson对我项目中json文件的解析速度。 Dom解析示例下面是我写的一个小例子,从test.json文件中读取内容并解析。其他代码示例也可以查看我的github仓库中关于rapidjson的测试代码:rapid_json_test.cpp. // test.json
{
"dictVersion": 1,
"content":
[
{"key": "word1","value": "单词1"},
{"key": "word2","value": "单词2"},
{"key": "word3","value": "单词3"},
{"key": "word4","value": "单词4"},
{"key": "word5","value": "单词5"}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
// test.cpp
?
void testSimpleDoc() {
using std::string;
using std::ifstream;
?
// read json content into string.
string stringFromStream;
ifstream in;
in.open("test.json",ifstream::in);
if (!in.is_open())
return;
string line;
while (getline(in,line)) {
stringFromStream.append(line + "n");
}
in.close();
?
// ---------------------------- read json --------------------
// parse json from string.
using rapidjson::Document;
Document doc;
doc.Parse<0>(stringFromStream.c_str());
if (doc.HasParseError()) {
rapidjson::ParseErrorCode code = doc.GetParseError();
psln(code);
return;
}
?
// use values in parse result.
using rapidjson::Value;
Value & v = doc["dictVersion"];
if (v.IsInt()) {
psln(v.GetInt());
}
?
Value & contents = doc["content"];
if (contents.IsArray()) {
for (size_t i = 0; i < contents.Size(); ++i) {
Value & v = contents[i];
assert(v.IsObject());
if (v.HasMember("key") && v["key"].IsString()) {
psln(v["key"].GetString());
}
if (v.HasMember("value") && v["value"].IsString()) {
psln(v["value"].GetString());
}
}
}
// ---------------------------- write json --------------------
pcln("add a value into array");
?
Value item(Type::kObjectType);
item.AddMember("key","word5",doc.GetAllocator());
item.AddMember("value","单词5",doc.GetAllocator());
contents.PushBack(item,doc.GetAllocator());
?
// convert dom to string.
StringBuffer buffer; // in rapidjson/stringbuffer.h
Writer<StringBuffer> writer(buffer); // in rapidjson/writer.h
doc.Accept(writer);
?
psln(buffer.GetString());
}
Cocos2d-x 3.0 加入了rapidjson库用于json解析。位于项目的cocos2d/external/json下。 rapidjson 是一个不需要包含 .lib 和 .dll 即可运行的可见代码库。项目 wiki 见这里。下面通过两个实例来深入了解它在 cocos2dx 中的用法。 注:CCLOG() 函数需要在 DEBUG 模式下才有作用。 生成JSON文件并保存
{"json":"json string","array":[{"inttag":1,"doubletag":1,"booltag":true,"hellotag":"helloworld"}]} 读取JSON文件并显示rapidjson 需要根据原 json 格式单独编写解析方法,因此根据以上生成方法,解析方法应该为: CCLOG 的最终显示为:json stringjson stringtest11.0000001helloworld (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby – 如何在Nokogiri XML DocumentFragment中
- ruby-on-rails – Rails:Test :: Unit为什么在任
- swift3 – 通过cocoapods安装领域时出错
- ruby-on-rails – allowed_pa??rams – rails4和
- ruby-on-rails – 将FactoryGirl的attributes_fo
- JaxbContext生成xml文件或java类对象转化注解
- grep及正则表达式系列---03
- react
- ruby – kernel_require.rb:55:在`require’中
- C++利用MySQL API连接和操作数据库实例详解