rapidjson使用总结

原创 2015年11月18日 16:13:35

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::endl

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());
}
版权声明:本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名elloop(包含链接) 举报

相关文章推荐

rapidjson的使用例子

最近在使用json, 由以前的jsoncpp转为rapidjson, 听说这个效率高一点; 不过我觉得比较好的就是rapidjson不需要库,只要头文件就可以了 记录下来方便自己以后使用 #incl...

RapidJSON的使用

关于RapidJSON rapidjson项目地址:https://github.com/miloyip/rapidjson 项目下载完成后,打开readme.md文件,查看项目说明。 Rapi...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

c++中rapidjson库下载安装及使用

rapidjson库官网地址:http://www.oschina.net/news/61812/rapidjson-1-0-final rapidjson库下载网地址:https://github...

如何使用rapidjson库进行json格式的封装及解析

一,字符串json封装及及解析的实例 #include "rapidjson/document.h" #include "rapidjson/prettywriter.h"   #inclu...

[rapidjson]_[C/C++]_[rapidjson库使用简单介绍]

场景: 1.cpp的json有很多,其中哟jsoncpp等,rapidjson是一个比较好的选择,特别是开发跨平台应用时,因为它只有头文件. 2.再用cpp生成html网页时,通过json数据和j...

RapidJson 解析(1)

Json 是一种轻量级数据交换格式,具有易于人阅读和编写,同时也易于机器解析和生成。相较于XML,json更小、读写更快、更易解析。另一方面,Rapidjson作为json的升级版,在效率方面,具有更...

如何将 rapidjson::Value 转化为string类型

rapidjson::Value msg(rapidjson::kObjectType); rapidjson::StringBuffer buffer; rapidjson::W...

rapidjson官方教程

教程 目录 Value 及 Document 查询Value 查询Array 查询Object 查询Number 查询String 创建/修改值 改变Value类型 转移语意(...

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

项目地址:http://code.google.com/p/rapidjson/ 上面有很详细的介绍:http://code.google.com/p/rapidjson/wiki/UserGuid...

Json文件 使用rapidjson获取Json数据

在游戏中使用Json来储存数据配置文件,既方便读取,有方便管理。 一.使用cocostudio生成Json文件 1.先在Excel中编辑好数据 最后一个“可穿透”属性,本来应该...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)