c++ 使用 rapidjson 解析 json
2023-09-11 14:13:59 时间
环境搭建
在 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.csdn.net/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;
}
效果图
相关文章
- [C++] 用Xcode来写C++程序[2] 操作变量
- alibaba的FastJson(高性能JSON开发包) json转换
- C/C++每日一练(20230414)
- Flutter高级第2篇:JSON的序列化和反序列化、创建模型类转换Json数据
- Android Studio JSON To Kotlin Class插件安装,它把Json自动转换Kotlin Class
- 软考中级(软件设计师)——面向对象程序设计(C++&Java二选一的题15分-目标3分)
- 3 的幂(C++)
- 深度解析为什么做深度学习,都用python,而不用java或者c++
- [h5棋牌项目]-17-C++读取json文件
- 解答私信@被c++折磨头秃的花季美少女 //C++ 利用指针数组输入10个单词,编写函数对10个单词进行排序并输出,要求判断是否有相同的单词,如果有相同的单词在输出时该单词只输出一次。
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- C++实现Json解析详细教程
- Python JSON 数据|编码解码JSON数据,import json,json.dumps,json.loads
- C++获取json的value值
- c++ string的erase删除方法
- c++中通过文件名称获取文件后缀
- C++ json库jsoncpp 吐槽
- python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’
- c++ 析构函数 ~
- json c++处理学习
- 【python】解决json.dump(字典)时报错Object of type ‘float32‘ is not JSON serializable
- C++Primer学习笔记3-类
- C++智能指针shared_ptr
- jQuery ajax读取本地json文件_jQuery请求本地JSON文件,在谷歌浏览器运行时报跨域错误_Vscode使用Live Server
- 学习C++:C++进阶(二)CMake工程简介
- C++搭建集群聊天室(五):JSON序列化与反序列化