JSON 是文本数据交换格式,不是 JavaScript 对象的完整表示。它只有对象、数组、字符串、数字、布尔值和 null 六类值。
最小示例
跳转到“最小示例”{ "id": 42, "name": "sensor-a", "enabled": true, "channels": [1, 2, 3], "calibration": null}关键规则:
- 对象键和字符串必须使用双引号。
- 成员和数组元素之间使用逗号,但末尾不能有逗号。
- 标准 JSON 不支持注释、
NaN、Infinity、日期或二进制值。 - 数字语法允许小数和指数,但不允许前导加号、十六进制或无意义的前导零。
- 对象成员名应保持唯一;重复键在不同解析器中的处理不一致。
解析与生成
跳转到“解析与生成”始终使用语言提供的 JSON 库,不要通过字符串拼接生成数据,也不要使用 eval 解析。
const value = JSON.parse('{"name":"sensor-a","enabled":true}');const text = JSON.stringify(value);import json
value = json.loads('{"name":"sensor-a","enabled":true}')text = json.dumps(value, ensure_ascii=False)JSON 只保证语法正确,不保证字段符合业务要求。API 和配置入口还应验证必填字段、类型、范围和未知字段策略。
互操作边界
跳转到“互操作边界”| 问题 | 建议 |
|---|---|
| 日期时间 | 使用约定明确的字符串,例如 RFC 3339 形式,并在接口文档中声明时区 |
| 大整数 | 先确认接收端能否无损表示;必要时使用十进制字符串 |
| 二进制 | 使用外部文件、二进制协议,或在协议明确要求时使用 Base64 字符串 |
字段缺失与 null | 分别定义语义,不要默认两者等价 |
| 配置注释 | 改用支持注释的格式,或把说明放入独立文档 |
常见错误
跳转到“常见错误”{ "name": "sensor-a", "ports": [8000, 8001]}如果解析失败,优先检查单引号、尾随逗号、未转义换行和复制进来的不可见字符。边界处先解析再验证,不要用正则表达式解析嵌套 JSON。
来源:CSDN 原文,首次发布于 2025-03-12。