rapidjson使用总结
来源:互联网 发布:levis和lee知乎 编辑:程序博客网 时间:2024/06/05 23:56
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"} ]}
// test.cpp#include "rapidjson/document.h"#include "rapidjson/stringbuffer.h"#include "rapidjson/writer.h"#include <fstream>#include <string>#include <cassert>#include <iostream>#define psln(x) std::cout << #x " = " << (x) << std::endlvoid 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());}
5 0
- rapidjson使用总结
- rapidjson 使用总结
- rapidjson使用总结
- rapidjson使用
- rapidjson 使用
- rapidjson 使用
- rapidjson读写方法总结
- rapidjson库的使用
- RapidJSON的使用
- rapidJson 的使用
- rapidjson常见使用示例
- rapidjson的使用
- rapidjson 使用例子
- rapidjson的使用例子
- rapidjson使用样例
- rapidjson的使用
- rapidjson简单使用
- rapidjson使用问题小计
- 将文件内容隐藏在bmp位图中
- 一个简单的对话框JDialog
- MySQL的几种优化方法
- java中如何防止类被初始化(实例化)?
- 简化的以,号分隔为SQLtable
- rapidjson使用总结
- html网页框架
- 统计学习方法 --- 感知机模型原理及c++实现
- 背包问题九讲
- JQuery按照form下载文件+后台asp.net,非ajax(下)
- Ubuntu下Matlab 2014 快捷键修改
- Week3-6NLP task 2/3
- Android Context 详解
- delphi实现托盘