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" |
| \uXXXX | Unicode 码点用 \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 object | object 的值可以是 object / array | {"user": {"id": 1}} |
| nested array | array 可包含任意类型元素 | [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 |
| dates | JSON 无日期类型,用 ISO 8601 字符串 | "ts": "2026-08-29T00:00:00Z" |
| no leading zero | 数字不允许前导零(如 01) | "n": 1 |
| JSON vs YAML | YAML 允许注释/无引号/缩进;JSON 更严格、解析更快 | — |
| JSON vs XML | JSON 更轻量、嵌套天然;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(解析快、生态广)。两者可以互相转换。