rapidjson是一个高效的C++ JSON解析/生成器,具有小而全、快且独立等优点。
rapidjson书写Json文件
头文件
#include"rapidjson/stringbuffer.h"
#include"rapidjson/writer.h"
#include"rapidjson/prettywriter.h" //可以自动换行
将内容写入到json文件
std::string strJsonPath = " ";
//检查文件路径是否存在不存在自动创建该路径(使用Boost库)
boost::filesystem::path fileDir = strJsonPath; //设置写入Json文件路径
if(!boost::filesystem::exists(fileDir.parent_path())
{
boost::filesystem::create_directories(fileDir.parent_path());
}
rapidjson::StringBuffer strBuff; //创建JsonBuffer
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(strBuff);
//{}大括号
writer.StartObject();
......
writer.EndObject();
//文本标签加内容
writer.Key("str_text");
writer.Int(i_);
writer.Key("str_text");
writer.Double(d_);
//[]中括号
writer.StartArray();
.......
writer.EndArray();
//保存Buffer里面的内容到Json文件
std::ofstream ofs;
ofs.open(strJsonPath,std::ios::out | std::ios::app);
std::string strBuffer = strBuff.GetString();
ofd << strBuffer;
ofs.close();
rapidjson读取json文件
#include <iostream>
#include <fstream>
#include "rapidjson/document.h"
#include "rapidjson/filereadstream.h"
using namespace rapidjson;
using namespace std;
int main() {
// 1. 打开 JSON 文件
ifstream ifs("example.json");
if (!ifs.is_open()) {
cerr << "Failed to open the file." << endl;
return 1;
}
// 2. 将文件内容读入缓冲区
string content((istreambuf_iterator<char>(ifs)), (istreambuf_iterator<char>()));
// 3. 关闭文件流
ifs.close();
// 4. 解析 JSON
Document document;
document.Parse(content.c_str());
if (document.HasParseError()) {
cerr << "JSON parse error: " << GetParseError_En(document.GetParseError()) << endl;
return 1;
}
// 5. 访问 JSON 数据
if (document.IsObject()) {
// 在此处进行 JSON 数据的访问和操作
// 例如:
if (document.HasMember("key")) {
const Value& value = document["key"];
if (value.IsString()) {
cout << "Value of key: " << value.GetString() << endl;
}
}
}
return 0;
}