欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ JSON 库- RapidJSON

程序员文章站 2024-02-02 19:31:28
...

   编写网络应用软件,经常要使用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 库。网上有许多资料可供参考。这里就不再啰嗦了。看来,写软件关键是要选对库!达到事半功倍的效果。

相关标签: rapidjson