环境搭建
在 git 上下载源码
之后将这个目录添加到项目的 “附加包含目录”:
代码
#include <iostream>
#include <Windows.h>
#include <vector>
#include <atlbase.h>
#include <algorithm>
#include <clocale>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
using namespace std;
/* https://blog.youkuaiyun.com/qq_27385759/article/details/79277434
{
"test_int": 100,
"test_float": 100.9,
"test_string": "asd",
"test_float_array": [],
"test_object": {
"vec_key": [1, 2, 3,],
"i_key": 789,
"f_key": 111.3,
"s_key": "qwe"
}
}
*/
#define TEST_JSON "{\"test_int\": 100,\"test_float\" : 100.9,\"test_string\" : \"asd\",\"test_float_array\" : [] ,\"test_object\" : {\"vec_key\": [9, 3, 5, 7, 2, 0] ,\"i_key\" : 789,\"f_key\" : 111.3,\"s_key\" : \"qwe\"}}"
// 初始化
rapidjson::Document string2Json(string str)
{
rapidjson::Document root;
if (root.Parse(str.c_str()).HasParseError())
{
return NULL;
}
return root;
}
// 添加
void addJson(rapidjson::Document& doc)
{
doc.AddMember("test_int", 100, doc.GetAllocator());
doc.AddMember("test_float", 100.9, doc.GetAllocator());
doc.AddMember("test_string", "asd", doc.GetAllocator());
rapidjson::Value val_floatArr(rapidjson::kArrayType);
doc.AddMember("test_float_array", val_floatArr, doc.GetAllocator());
rapidjson::Value val_testObject(rapidjson::kObjectType);
val_testObject.AddMember("i_key", 789, doc.GetAllocator());
val_testObject.AddMember("f_key", 111.3, doc.GetAllocator());
val_testObject.AddMember("s_key", "qwe", doc.GetAllocator());
rapidjson::Value val_vecKey(rapidjson::kArrayType);
val_vecKey.PushBack(1, doc.GetAllocator());
val_vecKey.PushBack(2, doc.GetAllocator());
val_vecKey.PushBack(3, doc.GetAllocator());
val_testObject.AddMember("vec_key", val_vecKey, doc.GetAllocator());
doc.AddMember("test_object", val_testObject, doc.GetAllocator());
}
void changeJson(rapidjson::Document& doc)
{
doc["test_int"].SetInt(0);
doc["test_float"].SetFloat(0);
doc["test_string"].SetString("null");
doc["test_object"]["i_key"].SetInt(0);
doc["test_object"]["f_key"].SetFloat(0);
doc["test_object"]["s_key"].SetString("null");
rapidjson::Value& val_vecKey = doc["test_object"]["vec_key"];
val_vecKey[0].SetInt(0);
val_vecKey[1].SetInt(0);
val_vecKey[2].SetInt(0);
}
// 删除
void deleteJson(rapidjson::Document& doc)
{
doc["test_object"].RemoveAllMembers(); // RemoveAllMembers 只能删除 object 字段
doc["test_object"].RemoveMember("i_key"); // RemoveMember 不能跨层删除
}
// 输出
void displayJson(rapidjson::Document& doc)
{
rapidjson::StringBuffer jsonBuffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(jsonBuffer);
doc.Accept(writer);
printf("%s\n\n", jsonBuffer.GetString());
}
int main()
{
cout << "\n使用字符串初始化 json" << endl;
rapidjson::Document docTest = string2Json(TEST_JSON);
displayJson(docTest);
cout << "\n添加 json" << endl;
rapidjson::Document doc;
doc.SetObject();
addJson(doc);
displayJson(doc);
cout << "\n修改 json" << endl;
changeJson(doc);
displayJson(doc);
cout << "\n删除 json" << endl;
deleteJson(doc);
displayJson(doc);
cout << "\n\n\nfinished." << endl;
getchar();
end:
getchar();
return 0;
}