JSON 速查表

JSON 速查:数据类型、双引号与反斜杠转义、JSON.parse / stringify、MIME 类型、大整数精度与日期处理等常用语法与坑点,写接口或配置文件时快速查阅。

类型 / 语法说明示例
string双引号包裹的文本值"name": "Tom"
number整数或浮点数(无前导零,不含 NaN/Infinity)"age": 30
boolean布尔值 true 或 false"active": true
null表示空值(必须小写)"deleted": null
object无序键值集合,用花括号包裹{"id": 1, "name": "Tom"}
array有序值列表,用方括号包裹["a", "b", "c"]
"key"键必须是双引号字符串"key": value
escape \"字符串内的双引号需转义为 \""q": "He said \"hi\""
\\反斜杠本身需写成 \\(如路径 C:\\temp)"p": "C:/tmp"
\b \f \n \r \t控制字符用转义序列表示"s": "line1\nline2"
\uXXXXUnicode 码点用 \uXXXX 表示"s": "\u2728"
,键值对 / 数组元素之间用逗号分隔{"a": 1, "b": 2}
no trailing comma最后一项后不允许尾逗号✗ {"a": 1,}
no comments标准 JSON 不支持 // 或 /* */ 注释用 JSONC / JSON5 扩展
root value顶层可以是 object 或 array[1, 2, 3]
nested objectobject 的值可以是 object / array{"user": {"id": 1}}
nested arrayarray 可包含任意类型元素[1, "a", {"x": 2}]
duplicate keys解析时后者覆盖前者(应避免重复键){"a": 1, "a": 2} → 2
JSON.parse()字符串解析为对象,非法则抛错JSON.parse('{"a": 1}')
JSON.stringify()对象序列化为字符串JSON.stringify(obj, null, 2)
pretty / minify带缩进格式化 vs 去空白压缩JSON.stringify(o, null, 2)
application/json传输时使用该 MIME 类型Content-Type: application/json
JSON Schema声明式描述数据结构的格式{ "$schema": "...", "type": "object" }
big integer超过 2^53 的整数在 JS 中失真"id": 9007199254740993
datesJSON 无日期类型,用 ISO 8601 字符串"ts": "2026-08-29T00:00:00Z"
no leading zero数字不允许前导零(如 01)"n": 1
JSON vs YAMLYAML 允许注释/无引号/缩进;JSON 更严格、解析更快
JSON vs XMLJSON 更轻量、嵌套天然;XML 有标签/属性/命名空间

常见问题

JSON 和 JavaScript 对象有什么区别?

JSON 是纯数据格式:键必须双引号、值只能是 string/number/boolean/null/object/array,不能有函数、undefined、Date 对象或注释。JS 对象字面量更宽松(键可无引号、可含方法)。`JSON.parse` / `JSON.stringify` 在两者间转换。

为什么我的 JSON 解析报错?

最常见原因:键没加双引号、字符串用了单引号、出现尾逗号、包含注释、或数字写成 01 / NaN / Infinity。用 JSON 校验或格式化工具可快速定位出错行号。

大整数(如订单号)为什么会变样?

JavaScript 数字采用双精度浮点,超过 2^53(9007199254740992)的整数无法精确表示,解析后末几位失真。处理 ID 等大整数应作为字符串传输,或使用 BigInt / decimal 类库。

JSON 和 YAML 该选哪个?

人写的配置、Kubernetes 清单等用 YAML(可读、支持注释);API 传输、日志、NoSQL 存储用 JSON(解析快、生态广)。两者可以互相转换。