跳转到内容
新建笔记

JSON 数据格式

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。