0

0

C++怎么读写JSON_C++数据解析教程【热门】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-03-03 10:00:37

|

231人浏览过

|

来源于php中文网

原创

绝大多数新项目选 nlohmann/json:免编译、头文件即用、c++11 全平台兼容;jsoncpp 需手动编译且易遇链接/版本问题;旧项目勿强行迁移,嵌入式场景体积差异微小,读 json 文件必须用 binary 模式。

c++怎么读写json_c++数据解析教程【热门】

用 nlohmann/json 还是 jsoncpp?选库前先看这三点

绝大多数新项目直接用 nlohmann/json,它免编译、头文件即用、C++11 起全平台兼容,2026 年已成事实标准。jsoncpp 需要手动编译静态/动态库,Linux 下容易因 libjsoncpp.so 版本不匹配报 undefined symbol 错误,Windows 上更常遇到 LNK2019 找不到 Json::Reader::parse 实现——本质是链接时漏了 libjsoncpp.lib 或 CMake 没正确 target_link_libraries

  • 已有旧项目用 jsoncpp:别强行替换,Json::Valuenlohmann::json 语义差异大,迁移成本高
  • 嵌入式或极端精简场景:jsoncpp 的二进制体积略小,但差距在百 KB 级,通常不构成决策依据
  • 需要中文键名或 UTF-8 原生支持:两个库都支持,但 jsoncpp 默认不校验 BOM,读带 U+FEFF 的文件可能静默失败

读 JSON 文件时,ifstream 必须加 std::ios::binary 吗?

必须加。不加会导致 Windows 下读取含换行的 JSON(比如用 StyledWriter 格式化过的)时,\r\n 被 ifstream 自动转成 \n,后续 Json::Reader::parse() 解析失败,报错类似 "invalid value" at line 1;nlohmann/json 虽然容错稍强,但遇到 BOM 或非 ASCII 字符仍可能解析出空对象。

  • std::ifstream ifs("config.json", std::ios::binary); 是安全底线
  • 读完后不用 ifs.seekg(0) 回退——parse() 内部会处理流位置
  • 如果用 std::filesystem::read_bytes(C++17),则完全绕过流问题,但需自行转 std::string_view

nlohmann::json::parse()jsoncpp::Reader::parse() 的错误处理差异

两者都返回布尔值表示成功,但错误信息暴露程度天差地别:nlohmann 提供 json::parse_error 异常,能精确到第几行第几个字符;jsoncpp 只有 getFormattedErrorMessages() 返回字符串,且默认不开启详细模式,容易让开发者对着 "parse error" 空转。

Poe
Poe

Quora旗下的对话机器人聚合工具

下载
  • nlohmann 示例:try { auto j = nlohmann::json::parse(ifs); } catch (const nlohmann::json::parse_error& e) { std::cerr
  • jsoncpp 必须显式启用:reader.parse(ifs, root, false); 第三个参数为 false 才输出完整错误上下文
  • 线上环境别依赖 std::cout 打印错误——JSON 解析失败往往发生在配置加载阶段,日志系统可能还没初始化

写 JSON 到文件时,格式化(pretty)和紧凑(compact)怎么选?

开发调试期无脑开 std::setw(2) 格式化;生产环境配置文件若被 Ansible/Chef 等工具 diff,紧凑模式可避免因空格/换行导致的误判;但注意:nlohmann 的 dump(2) 输出末尾带换行,jsoncpp 的 StyledWriter 不带——如果下游脚本用 head -n1 读首行,结果可能不一致。

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

  • nlohmann 写法:ofs (显式补换行更可控)
  • jsoncpp 写法:Json::StreamWriterBuilder wbuilder; wbuilder["indentation"] = " "; ofs
  • 别用 FastWriter 存含中文的配置——它不转义 Unicode,终端显示可能乱码,且某些 shell 工具会截断

真正麻烦的从来不是读写本身,而是 JSON 键名拼错、类型强制转换(比如把 "123"int 用)、数组越界访问这些运行时才暴露的问题。建议所有从 JSON 取值的地方都加 isXXX() 检查,哪怕多三行代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

452

2023.08.07

json是什么
json是什么

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

546

2023.08.23

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

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

326

2023.10.13

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

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

81

2025.09.10

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

366

2023.10.25

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

366

2023.10.25

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

65

2026.02.28

热门下载

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

精品课程

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

共101课时 | 9.8万人学习

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

共39课时 | 3.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号