第 10 课
解析:从文本到程序中的值
解析器如何构建内存结构,以及代码运行前可能失败的原因。
解析指把 JSON 文本变成程序可用的内存值——对象、数组、字符串与数字。各语言都有库或内置能力,API 名称不同,概念一致。
解析的结果
输入文本:
{"id": 7, "tags": ["api", "draft"]}
解析成功后,运行时得到可索引的结构:id 为数字,tags 为字符串列表。完成解析前,文本只是字符串,不能当结构化数据使用。
常见失败模式
| 问题 | 表现 |
|---|---|
| 语法错误 | 解析器报错并给出位置 |
| 无效 UTF-8 | 在 JSON 规则生效前即解码失败 |
| 超大输入 | 内存或时间超限 |
| 重复键 | 多数解析器后值覆盖前值——可能静默丢数据 |
解析只保证 语法 合法,不保证业务含义正确(错误 ID、缺字段)——需 schema 或业务逻辑校验。
解析、校验与转换
- 解析 — 文本是否为合法 JSON?
- 校验(可选)— 是否符合 schema 或必填字段?
- 转换 — 映射为领域类型(日期、精度数、枚举等)
生产环境应分阶段处理,便于定位错误类型。
安全提示
不要用 eval 执行 JSON 文本,应使用专用解析器。对不可信输入限制体积与嵌套深度(若库支持)。
理解解析,就能明白为何一个多余逗号会阻断后续流程——以及为何总要 先修语法。