#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/PrettyWriter.h"
#include <fstream>
int main()
{
rapidjson::Document doc;
doc.SetObject();
rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
rapidjson::Value obj1(rapidjson::kObjectType);
obj1.AddMember("key12", 2, allocator);
rapidjson::Value obj(rapidjson::kObjectType);
int num = 121;
obj.AddMember("key1", num, allocator);//数字类型
obj.AddMember("key3", obj1, allocator);//对象类型
obj.AddMember("key4", "str", allocator);//字符串类型
std::string cc = "strcc";
rapidjson::Value objstr(rapidjson::kStringType);
objstr.SetString(cc.c_str(), allocator);
obj.AddMember("key4", objstr, allocator);//字符串变量 不能直接传,常量可以
rapidjson::Value ObjectArray(rapidjson::kArrayType);//一个数组
rapidjson::Value objElem(rapidjson::kStringType);//数组元素
ObjectArray.PushBack(objElem, allocator);
obj.AddMember("array", ObjectArray, allocator);
doc.AddMember("Double", obj, allocator);
//查询操作
//doc["Double"]["key4"] = 10;//必须保证所有键都存在,否则会报错
auto val = doc["Double"].GetInt();//返回key对应的值,不过必须HasMember来判断,否则key不存在会报异常
//HasMember判断key是否存在
bool res = doc.HasMember("key1");//返回true
res = doc["Double"].HasMember("key1");//返回false
//FindMember查找Key,并返回Key的迭代器
auto iter = doc["Double"].FindMember("key1");
if(iter != doc["Double"].MemberEnd())//判断是否存在该key
{
int resVal = iter->value.GetInt();
}
//读文件
{
std::string Path("./ss.json");
std::ifstream in(Path.data()); // 文件的读取操作, copy的 不解释
if (in.is_open()) {
std::string json_content((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()); //将文件的数据流转换位std::string类型
in.close(); // 关闭文件
doc.Parse(json_content.c_str());
}
}
//写文件
{
//无格式输出
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);//非格式化
doc.Accept(writer);
string data = strBuf.GetString();
//带格式输出
rapidjson::StringBuffer buffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> prettyWriter(buffer); //格式化
doc.Accept(prettyWriter); //将json的数据流写入 writer?
std::string content = buffer.GetString();
//写文件
std::string Path("./ss.json"); // 将文件顶层路径转换位std::string 类型
std::ofstream outfile;
outfile.open(Path.data());
if (outfile.is_open())
{
outfile << content;
outfile.close();
}
}
}
RapidJson基础应用
最新推荐文章于 2021-12-21 16:15:05 发布