FEATURED · 精选文章

用 nlohmann/json 处理 C++ JSON:单头文件三步跑通的完整实践

发布时间 / 2026/8/31 8:42:20
来源 / 创域科博编辑部
栏目 / 资讯中心
用 nlohmann/json 处理 C++ JSON:单头文件三步跑通的完整实践 用 nlohmann/json 处理 C JSON单头文件三步跑通的完整实践【免费下载链接】jsonJSON for Modern C项目地址: https://gitcode.com/GitHub_Trending/js/json写 C 程序要读配置文件、要解析接口返回的字符串迟早会碰到 JSON。可大多数 C JSON 库要么集成麻烦要么 API 学习成本高。nlohmann/json 是一个单头文件的 C JSON 解析与序列化库复制一个头文件进项目就能完成解析、输出和自定义类型转换。什么是 nlohmann/jsonnlohmann/json 的口号是 JSON for Modern C用 C11 实现目标是让 JSON 用起来像内置类型。它适合想快速给 C 项目加 JSON 支持、又不想折腾构建系统的开发者。当前仓库版本为 v3.12.0。你能直接感知的收益整个库就是single_include/nlohmann/json.hpp一个头文件无编译、无依赖API 是 STL 容器风格会用std::map就会用它单元测试覆盖率 100%并用 Valgrind、Clang Sanitizers 和 Google OSS-Fuzz 做了持续检测它的使用范围可以从仓库里的客户名单看出Blender、MySQL、QGIS、Siemens 等产品都在用。三步跑通第一个 JSON 程序第一步拿到头文件。clone 仓库后库本体在single_include目录里。git clone https://gitcode.com/GitHub_Trending/js/json第二步写一个最小示例它演示了创建对象并输出缩进 JSON。#include nlohmann/json.hpp using json nlohmann::json; int main() { json j {{name, demo}, {value, 42}}; std::cout j.dump(2) std::endl; }第三步加头文件路径编译并运行。g -stdc11 -I json/single_include demo.cpp -o demo ./demo运行后你会看到两行缩进的 JSON 输出。整个过程没有 CMake、没有第三方依赖只需要一个支持 C11 的编译器。三个值得了解的核心能力解析与输出两行代码搞定把 JSON 字符串转成对象、再把对象转回字符串是这个库最高频的用法。json j json::parse(R({name: demo, value: 42})); std::cout j.dump(2) std::endl;parse负责反序列化dump负责序列化传一个参数就能输出带缩进的美化结果写配置文件时很省事。自定义结构体序列化写一个函数就够想让自己的 struct 自动变成 JSON只需实现一对函数。void to_json(json j, const Person p) { j {{name, p.name}, {age, p.age}}; } json j p;实现to_json后json j p;直接生效反序列化再写一个from_json即可不需要逐字段手动赋值。相关宏的写法见 官方特性文档。JSON Pointer 与二进制格式访问深层嵌套字段时不用写一串[]直接用 JSON Pointer 定位。也可以转成二进制格式传输。auto k j.at(/name_json_pointer); auto v json::to_msgpack(j);Pointer 支持 RFC 6901 路径语法配合 JSON Patch 还能对对象做增量修改。库同时支持 MessagePack、CBOR、UBJSON、BSON、BJData 五种二进制格式的互相转换。与同类工具的取舍选型主要看两个场景。你的代码是普通业务逻辑读配置、解析接口返回那 nlohmann/json 是最省事的单头文件、STL 风格 API上手成本最低。如果你的程序是解析密集型的比如一次要解析上 GB 的数据、解析耗时占了 CPU 大头那应选 RapidJSON 这类专用高性能库。维度nlohmann/jsonRapidJSON集成方式单头文件无构建需引入源码并编译API 风格STL 容器式接近 PythonDOM/回调式写法更啰嗦解析速度中等约 72ms第一梯队约 8ms速度差距来自第三方基准测试 nativejson-benchmark 的解析时间对比图中 nlohmann 位于中游。nativejson-benchmark 各 JSON 库解析时间对比nlohmann 约 72ms 处于中游.png)结论很简单开发效率和代码量优先选 nlohmann/json解析性能是核心瓶颈选 RapidJSON。常见坑与疑问问必须用 CMake 才能集成吗不是。头文件加进工程、-I指向single_include就能编译。团队项目也可以走包管理器vcpkg、Conan、Homebrew 里都有nlohmann_json目标集成文档里有各方案的具体配置。问大文件解析会不会慢到不可用对多数业务代码不会。基准测试里它的解析耗时约 72ms属于中游水平。只有当 JSON 解析本身成为 CPU 热点时才需要换专用高性能库。问解析失败或缺少字段怎么处理json::parse第二个参数传nullptr、第三个参数传false失败时不抛异常而是返回 discarded 值。读字段时优先用j.value(key, 默认值)缺键时返回默认值能少写很多 try/catch。更多问题见 官方 FAQ。小结如果你希望用最小成本给 C 项目加上 JSON 支持nlohmann/json 值得优先尝试单头文件、STL 风格 API、复制即可用。它适合从配置读取、接口解析到二进制序列化的绝大多数场景。官方 FAQ 在 docs/mkdocs/docs/home/faq.md功能文档在 docs/mkdocs/docs/features/。【免费下载链接】jsonJSON for Modern C项目地址: https://gitcode.com/GitHub_Trending/js/json创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻