c++ json封装
时间: 2025-01-08 11:46:02 浏览: 4
### 关于C++中JSON封装
#### 使用第三方库进行JSON处理
为了简化开发过程并提高效率,在C++项目中通常会选择成熟的第三方库来实现JSON解析和序列化功能。其中,nlohmann/json 是一个广泛使用的开源库,提供了简单易用的API用于操作JSON数据。
```cpp
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() {
// 创建 JSON 对象
json j;
// 添加键值对到 JSON 对象
j["name"] = "Alice";
j["age"] = 30;
j["is_student"] = false;
// 将 C++ 容器转换成数组形式存储在 JSON 中
std::vector<int> scores{95, 87, 92};
j["scores"] = scores;
// 输出 JSON 字符串表示
std::cout << j.dump(4) << '\n';
}
```
此段代码展示了如何创建一个简单的JSON对象,并向其内部添加不同类型的数据项,最后以易于阅读的形式打印出来[^1]。
对于更复杂的场景,比如读取文件中的JSON内容或将现有结构体实例转化为JSON格式,则可以通过如下方式完成:
```cpp
// 假设有这样一个结构体定义
struct Person {
std::string name;
int age;
};
void to_json(json& j, const Person& p) {
j = json{{"name", p.name}, {"age", p.age}};
}
void from_json(const json& j, Person& p) {
j.at("name").get_to(p.name);
j.at("age").get_to(p.age);
}
int main() {
// 序列化:将 struct 转换为 JSON
Person alice{"Alice", 30};
auto js = json(alice);
std::ofstream o("./example.json");
o << js.dump(4);
// 反序列化:从 JSON 文件加载回 struct
std::ifstream i("./example.json");
json jf;
i >> jf;
Person bob;
jf.get_to(bob);
}
```
上述例子说明了怎样利用自定义的`to_json()` 和 `from_json()` 函数来进行双向映射——既可以从C++基本类型或复合类型生成相应的JSON表达,也可以反过来把接收到的JSON转回到程序内的变量上。
阅读全文