C++ JSON 库- RapidJSON

   编写网络应用软件,经常要使用json格式。C++ 程序使用哪一个库好呢?我选择了Rapidjson。RapidJSON 是腾讯公司贡献的开源项目。特点是安装简单。网络上的实例多,文档齐全。

官网:https://miloyip.github.io/rapidjson/index.html

github:https://github.com/Tencent/rapidjson

安装

$ sudo apt-get update

$ sudo apt-get install rapidjson-dev

 

这是一个headers-only library 的库,安装后,在/usr/include 中包含了rapidjson 目录,但是没有发现任何静态库和动态库文件。打开一个.h 文件,看到其中包含了C++ 的代码。原来这就是传说中的headers-only library 库。

  就C/C++编程语言而言,当编译器可以通过头文件得到一个库包含的所有宏、函数、类的完整定义时,我们称这个库是header-only的。

实例1

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
int main() {
    // 1. 把 JSON 解析至 DOM。
    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
    Document d;
    d.Parse(json);
    // 2. 利用 DOM 作出修改。
    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);
    // 3. 把 DOM 转换(stringify)成 JSON。
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);
    // Output {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;
    return 0;
}

 编译

$ clang++ test.cpp -o testjson

$ ./testjson

实例2

这个程序演示新建一个json 文件:

#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
using namespace rapidjson;
int main() {
	Document document; 		// Null
	document.SetObject();	//如果不使用这个方法,AddMember将会报错
	Value value;   			// Null
	value.SetBool(true);	//调用set方法进行设置
	document.AddMember("bool_key",value,document.GetAllocator());
  // 把 DOM 转换(stringify)成 JSON。
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    document.Accept(writer);
    std::cout << buffer.GetString() << std::endl;
    return 0;
}

小结

     rapidjson 是一个腾讯开源的比较流行的json 库。网上有许多资料可供参考。这里就不再啰嗦了。看来,写软件关键是要选对库!达到事半功倍的效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高效的 C++ JSON 解析/生成器,提供 SAX 及 DOM 风格 API 简介 RapidJSON 是一个 C++JSON 解析器及生成器。它的灵感来自RapidXml 。 RapidJSON 小而全。它同时支持 SAX 和 DOM 风格的 API。SAX 解析器只有约 500 行代码。 RapidJSON 快。它的性能可与 strlen() 相比。可支持 SSE2/SSE4.2 加速。 RapidJSON 独立。它不依赖于 BOOST 等外部。它甚至不依赖于 STL。 RapidJSON 对内存友好。在大部分 32/64 位机器上,每个 JSON 值只占 16 字节(除字符串外)。它预设使用一个快速的内存分配器,令分析器可以紧凑地分配内存。 RapidJSON 对 Unicode 友好。它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate pair)及 "\u0000"(空字符)。 JSON(JavaScript Object Notation)是一个轻量的xx交换格式。RapidJSON 应该完全遵从 RFC7159/ECMA-404,并支持可选的放宽语法。 一、使用说明         rapidjson.fne 为英文原版         rapidjson_cn.fne  为中文翻译版(翻译的中文命令有点糙),使用中文版时,请改文件名为rapidjson.fne 不然会出错的。         rapidjson_static.lib 为静态,部分中文英文。         中文和英文可以无缝切换,直接替换支持文件就可以了。         本支持由VS2017,所以编译时,也必须要用VS2017编译。         VC2017连接器下载地址: http://bbs.eyuyan.com/read.php?tid=410252   VS2017易支持模板+VC2017链接器(讨厌vc6的可看)-->hxznhf http://bbs.eyuyan.com/read.php?tid=408541   全易论坛独创首发,Vs2017Linker编译器 -->cs666         关于RapidJSON的相关问题,请看:http://rapidjson.org/zh-cn/md_doc_faq_8zh-cn.html         使用有声明问题请加QQ群: 心宇->EVAxx研究中心(255829517)         现在支持完善了大概80%左右,已经可以正常使用,剩下20%是关于 reader 和编码以及一些参数有关,暂时对易不是很重要,后面也会完善。 二、版权声明         本支持为封装TX开源项目 RapidJSON ,为解决易语言 没有高性能JSON的问题。         项目官网:http://rapidjson.org/zh-cn/         github:https://github.com/Tencent/rapidjson/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值