1、从nlohman/json的github仓库下载源码,或直接点击http://139.9.223.99/files/nlohman_json/json-develop.zip 下载源码

2、将源码中include目录下的nlohman目录拷贝到需要的项目目录下

3、在需要的cpp文件中添加头文件既可使用nlohman/json库

#include <fstream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;

std::string f("example.json");
json data = json::parse(f);

nlohman/json常用API

accept:查看是不是合法的JSON文本

auto invalid_text = R"(
{
    "strings": ["extra", "comma", ]
}
)";
std::cout << std::boolalpha
      << json::accept(valid_text) << ' '

创建 JSON 对象

通过初始化列表创建

json j = {
    {"name", "John"},
    {"age", 30},
    {"is_student", false},
    {"courses", {"Math", "Science"}}
};

通过构造函数创建

json j;
j["name"] = "John";
j["age"] = 30;
j["is_student"] = false;
j["courses"] = {"Math", "Science"};

访问和修改 JSON 数据

访问数据

std::string name = j["name"];
int age = j["age"];
bool is_student = j["is_student"];
std::vector<std::string> courses = j["courses"].get<std::vector<std::string>>();

修改数据

j["name"] = "Jane";
j["age"] = 25;

检查是否存在某个键

if (j.contains("name")) {
    // key "name" exists
}

删除键值对

j.erase("is_student");

遍历 JSON 对象

for (auto& [key, value] : j.items()) {
    std::cout << key << ": " << value << std::endl;
}

JSON 到 C++ 类型的转换

从 JSON 转换到 C++ 类型

std::string name = j["name"].get<std::string>();
int age = j["age"].get<int>();
std::vector<std::string> courses = j["courses"].get<std::vector<std::string>>();

从 C++ 类型转换到 JSON

json j1 = json::array();
j1.push_back("Math");
j1.push_back("Science");

json j2 = json::object();
j2["name"] = "John";
j2["age"] = 30;
j2["courses"] = j1;

序列化和反序列化

将 JSON 对象序列化为字符串

std::string json_string = j.dump();  // 默认序列化为紧凑格式
std::string pretty_json_string = j.dump(4);  // 缩进为4的格式

从字符串反序列化为 JSON 对象

json j = json::parse(json_string);

其他功能

合并 JSON 对象

json j1 = {{"name", "John"}, {"age", 30}};
json j2 = {{"city", "New York"}};

j1.merge_patch(j2);  // 合并 j2 到 j1

By karlren

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注