讲师中心 微信公众号
AI工具推荐 视频效率加速

C++如何解析JSON数据_C++使用nlohmann/json库教程【三方】

风杰吖_9687

风杰吖_9687

发布时间:2026-02-05 15:21:02

|

869人浏览过

|

来源于php中文网

原创

直接使用nlohmann/json库实现JSON与C++对象互转:下载单头文件json.hpp包含即可;解析用json::parse()并捕获异常;取字段优先用.value()或.contains()避免崩溃;序列化用.dump()控制格式;自定义类型需ADL支持。

c++如何解析json数据_c++使用nlohmann/json库教程【三方】

直接用 nlohmann/json,别自己手写解析器——它把 JSON 的序列化/反序列化变成了 C++ 原生对象的赋值和读取。

怎么装 nlohmann/json(单头文件,不编译)

它本质就是一个 nlohmann/json.hpp 文件,没有构建步骤:

  • 去 GitHub 下载最新 release 的单文件:https://github.com/nlohmann/json/releases(找 json.hpp)
  • 放进项目目录(比如 include/nlohmann/json.hpp),然后在代码里 #include <nlohmann/json.hpp>
  • 确保编译器支持 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:

openclaw-gitcode-pr-monitor
openclaw-gitcode-pr-monitor

监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。

下载

立即学习“C++免费学习笔记(深入)”;

  • 安全访问用 .value("key", default_value),例如 j.value("age", 0),类型必须匹配(int、std::string 等)
  • 检查字段是否存在用 j.contains("key"),返回 bool
  • 强制取值(带断言)用 j["key"],但一旦 key 不存在就崩溃;数组同理,j[i] 越界也 crash
  • 嵌套访问建议链式判断:j.contains("user") && j["user"].contains("name") ? j["user"]["name"].get<std::string>() : ""
  • 类型转换要显式:j["count"].get<int>(),不能直接 (int)j["count"]

怎么把 C++ 对象转成 JSON 字符串(serialize)

最简场景下直接 .dump(),但要注意格式和精度:

  • j.dump() 生成紧凑 JSON(无空格);j.dump(2) 生成缩进为 2 的可读格式
  • 浮点数默认保留 6 位小数,如需更多,设 j.dump(2, ' ', true, json::error_handler_t::replace) 不够,得改 json::default_float_precision 或用自定义序列化
  • 自定义类型要支持 ADL(argument-dependent lookup):在类同名命名空间里定义 to_json(json&, const T&) 和 from_json(const json&, T&)
  • 注意循环引用:json 不检测对象自引用,会无限递归导致栈溢出

真正麻烦的从来不是“怎么写”,而是字段名拼错、类型假设错误、没处理缺失字段、或者把 parse 和构造函数混用——这些地方一出错,报的都是运行时异常,编译器拦不住。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2035

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2942

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

996

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3319

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5719

2023.08.02

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2748

2023.11.20

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2058

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1638

2023.08.03

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.8万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn