C++使用rapidjson读写JSON
rapidjson 是一个用于解析和生成 JSON 数据的快速、轻量级的 C++ 库。它提供了一组简单易用的 API,用于解析 JSON 文本并构建 JSON 对象,以及将 JSON 对象转换为字符串形式。
它具有如下特点
-
高性能
:RapidJSON 在处理 JSON 数据时具有出色的性能。它使用了一些优化技术,如内存池分配、移动语义和零拷贝,以提高解析和生成的速度。
-
轻量级
:RapidJSON 以一个单头文件的形式提供,不需要依赖其他库或复杂的安装过程。这使得它非常易于集成到项目中,并且具有较小的二进制大小和低资源消耗。
-
符合JSON标准
:RapidJSON 实现了 JSON 标准规范(RFC 8259)并支持所有常用的 JSON 功能,包括对象、数组、字符串、数字、布尔值和 null 值等。
-
跨平台
:RapidJSON 可以在多个平台上运行,包括 Windows、Linux、macOS 和嵌入式系统等。
读取和修改json
如果要读取和需改json,可以构造Document对象,把json字符串传给
Document对象,然后使用hasMember查看某个key是否存在。可以使用AddMember函数添加成员,使用RemoveMember删除成员,可以使用SetString等方法修改数据成员的值。
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include <iostream>
using namespace rapidjson;
int main(int argc, char **argv)
const char *json = "{\"key\":\"value\",\"flag\":true}";
Document document;
document.Parse(json);
// 查询
assert(document.HasMember("key"));
assert(document["key"].IsString());
std::cout << document["key"].GetString() << std::endl;;
// 修改
document["key"].SetString("hello world");
std::cout << document["key"].GetString() << std::endl;
// 添加
Value val;
val.SetString("string", document.GetAllocator());
document.AddMember("val", val, document.GetAllocator());
std::cout << document["val"].GetString() << std::endl;
document.RemoveMember("key");
std::cout << document.HasMember("key") << std::endl;
return 0;
生成json
如果要生成json,可以使用Writer和StingBuffer来实现。
startObject和endObject分别表示buffer对象开始和结束,中间的代码可以填充key和value,value可以支持Array,Number,String,bool等,rapidjson实现了RFC 8259 JSON标准规范。
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include <iostream>
using namespace rapidjson;
int main(int argc, char **argv)
//生成json
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
writer.StartObject();
//key为hello
writer.Key("hello");
//value为数组,使用StartArray和EndArray函数
writer.StartArray();
writer.String("world");
writer.String("json");
writer.EndArray();