微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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"} 
    ]
}
test.cpp
#include "../external/json/rapidjson.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();

    // 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());
            }
        }
    }
}

原文地址:https://www.jb51.cc/json/289231.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐