AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 65
JSON — 对象、数组、原语
C++ SELF
等级 65,
课时 0
我们把 JSON 看作值的树:根节点、
object
/
array
/
primitive
家族、字符串和转义规则(
\"
、
\n
)、数字和字符串的区别(
42
vs
"42"
)、
true
/
false
/
null
的行为,以及数据格式的关键点:“字段不存在”和“字段等于
null
”是不同的情况。结尾有一份常见错误的检查清单,方便用肉眼识别问题。
nlohmann::json
:
parse()
和
dump()
C++ SELF
等级 65,
课时 1
我们来拆解
nlohmann::json
中的基本循环“文本 ↔ JSON 树”:如何通过
json::parse()
解析字符串,如何通过
dump()
和
dump(
2
)
序列化回文本,如何区分语法错误的 JSON(
json::parse_error
)和结构正确但“不是期望结构”的 JSON(类型/访问错误),以及如何通过
std::ifstream
/
std::ofstream
可靠地从文件读取/写入文档。
模型映射:to_json/from_json
C++ SELF
等级 65,
课时 2
讲解为何在 C++ 项目中将
struct
↔ JSON 的转换规则集中到一个地方:对比使用手动序列化到
nlohmann::json
与通过
to_json
/
from_json
的做法,学习如何降低“魔法字符串”(字段键
"id"
、
"title"
等)的风险,讨论与
std::optional
、嵌套模型(如包含
std::vector<Task>
的
Project
)的配合,并演示通过
dump()
和
get<T>()
进行保存与加载的实际场景。
校验与默认值
C++ SELF
等级 65,
课时 3
我们来讨论为什么成功解析并不意味着数据正确,如何形式化 JSON 合约(必需/可选/带默认值的字段),以及如何在 C++ 中使用
nlohmann::json
来谨慎地校验结构和类型。练习使用
contains()
、
at()
、
value()
和
is_*
检查,区分“字段不存在”与
null
,然后安全地把数据读取到
struct
(包括
std::optional<std::string>
)并给出类似
"tasks[17]: ..."
的可读错误信息。
版本管理与 JSON 迁移
C++ SELF
等级 65,
课时 4
讲解为什么要在 JSON 中加入格式版本,以及如何在结构变化时避免崩溃:将字段
"version"
放在哪里,哪些变更被视为安全,如何构建「读取 → 确定版本 → 迁移 → 验证 →
from_json
/
j.get<Model>()
」流水线,以及如何在
nlohmann::json
上实现分步迁移(示例
migrate_v1_to_v2
,通过
dump(2)
读取/写入)。结尾给出版本支持策略和常见错误。
Please enable JavaScript to continue using this application.