直接使用nlohmann/json库实现JSON与C++对象互转:下载单头文件json.hpp包含即可;解析用json::parse()并捕获异常;取字段优先用.value()或.contains()避免崩溃;序列化用.dump()控制格式;自定义类型需ADL支持。
直接用 nlohmann/json,别自己手写解析器——它把 JSON 的序列化/反序列化变成了 C++ 原生对象的赋值和读取。
怎么装 nlohmann/json(单头文件,不编译)
它本质就是一个 nlohmann/json.hpp 文件,没有构建步骤:
- 去 GitHub 下载最新 release 的单文件:https://github.com/nlohmann/json/releases(找
json.hpp) - 放进项目目录(比如
include/nlohmann/json.hpp),然后在代码里#include - 确保编译器支持 C++11(最低要求),推荐 C++17 或更高
- 不需要链接任何库,也不需要 cmake find_package —— 它是 header-only
怎么把 JSON 字符串转成 C++ 对象(parse)
核心是 nlohmann::json 类型,它能自动推导结构。常见错误是忽略异常:
- 用
nlohmann::json::parse()解析字符串,失败会抛nlohmann::json::parse_error - 别直接
nlohmann::json j = "{...}";—— 这会调用字符串构造函数,不是解析,结果是字符串字面量 - 正确写法:
auto j = nlohmann::json::parse(json_str);,json_str是std::string或 C 风格字符串 - 如果输入不可信(如网络响应),必须 try/catch:
try { auto j = json::parse(s); } catch (const json::parse_error& e) { /* e.what(), e.byte */ }
怎么从 json 对象里取字段(避免 runtime_error)
字段不存在时默认行为是抛 nlohmann::json::type_error 或 out_of_range,不是返回空或 nullptr: