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