JSON 教程

JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式, 易于人读写,也易于机器解析与生成。它基于 JavaScript 对象语法的一个子集,但独立于语言,几乎所有主流编程语言都提供 JSON 解析库。 官方规范:json.org(中文)、 RFC 8259。 在线格式化与校验可使用本站 JSON 格式化 工具。

一、JSON 能做什么

  • 前后端通信:REST API 请求/响应体最常见格式
  • 配置文件:package.json、tsconfig.json 等
  • 日志与消息队列:结构化存储与传输
  • 数据持久化:NoSQL 数据库(如 MongoDB)文档格式

二、基本语法规则

  • 数据由键值对组成,键必须是双引号字符串
  • 键值对之间用英文逗号 , 分隔
  • 最外层必须是对象 { }数组 [ ]
  • 不允许注释、尾随逗号(trailing comma)、单引号字符串
  • 不允许 undefined、函数、Date 对象、NaN、Infinity(标准 JSON 中)
  • 键名区分大小写:"Name""name" 是不同键
{
  "name": "JSONMe",
  "version": "1.0.0",
  "enabled": true,
  "tags": ["json", "tools"]
}

三、六种数据类型

类型 说明 示例
字符串 string UTF-8 双引号字符串,支持转义 "hello""中文"
数字 number 整数或浮点数,不支持十六进制、前导零 42-3.141.2e+10
布尔 boolean truefalse,小写 true
空值 null 表示空,小写 null
对象 object 无序键值对集合,用 { } 包裹 {"a": 1}
数组 array 有序值列表,用 [ ] 包裹 [1, 2, 3]

四、对象与数组

4.1 对象(Object)

对象是一组 "key": value,键必须是字符串,值可以是任意 JSON 类型(含嵌套对象/数组)。

{
  "user": {
    "id": 1001,
    "profile": {
      "nickname": "小明",
      "email": "demo@jsonme.cn"
    }
  },
  "roles": ["admin", "editor"]
}

4.2 数组(Array)

数组元素可以是不同类型,索引从 0 开始(解析后在各语言中按数组/列表访问)。

[
  "字符串",
  123,
  true,
  null,
  { "nested": "object" },
  [1, 2, 3]
]

五、字符串与转义

字符串必须用双引号包裹。常用转义序列:

转义 含义
\"双引号
\\反斜杠
\/斜杠(可选)
\b退格
\f换页
\n换行
\r回车
\t制表符
\uXXXXUnicode 码点(4 位十六进制)
{
  "quote": "他说:\"JSON 很好用\"",
  "path": "C:\\data\\config.json",
  "unicode": "JSONMe \u54c8\u54c8\u54c8",
  "multiline": "第一行\n第二行"
}

本站 Unicode 中文互转UTF8 中文互转 可辅助处理编码。

六、数字

  • 不允许前导零(如 01 非法,00.5 合法)
  • 支持科学计数法:1.23e-46.02e23
  • 不支持 NaNInfinity-Infinity
  • JavaScript 中超过 Number.MAX_SAFE_INTEGER(253−1)的整数可能丢精度;本站格式化工具会保留大整数,不会精度丢失。
{
  "count": 42,
  "price": 19.99,
  "ratio": 1.2e-3,
  "bigIntDemo": 123456789012345678901234567890
}

七、常见错误

错误写法 原因 正确写法
{ name: "a" } 键未加双引号 { "name": "a" }
{ 'name': "a" } 使用了单引号 { "name": "a" }
{ "a": 1, } 尾随逗号(标准 JSON 不允许) { "a": 1 }(JSON5 允许)
{ // comment } 不支持注释 去掉注释或使用 JSON5
undefined 非 JSON 类型 null 或省略该字段

粘贴到 JSON 格式化 工具后,语法错误会高亮并提示行号,便于定位。

八、综合示例

以下示例涵盖嵌套对象、数组、转义、Unicode、大整数等常见场景。 打开 JSON 格式化 点击加载示例可载入更完整的演示数据。

{
  "title": "JSON 综合示例",
  "site": {
    "name": "JSONMe",
    "url": "https://www.jsonme.cn",
    "tools": [
      "JSON 格式化",
      "JSON 压缩转义",
      "JSON 对比",
      "JSON 转 Java"
    ]
  },
  "meta": {
    "version": "1.0.0",
    "published": true,
    "count": null,
    "ratio": 0.8675309
  },
  "quote": "你问我:\"什么工具好用?\",我答:\"JSONMe~\"",
  "unicode": "JSONMe \u54c8\u54c8\u54c8",
  "tags": ["json", "api", "tutorial"]
}

九、JavaScript API

浏览器与 Node.js 内置 JSON 对象,无需额外安装:

方法 说明
JSON.parse(text[, reviver]) 将 JSON 字符串解析为 JavaScript 值;语法错误会抛出 SyntaxError
JSON.stringify(value[, replacer[, space]]) 将 JavaScript 值序列化为 JSON 字符串;space 可控制缩进美化
const obj = JSON.parse('{"name":"JSONMe","ok":true}')
const text = JSON.stringify(obj, null, 2)

// 序列化时注意:undefined、函数、Symbol 会被忽略或变成 null
JSON.stringify({ a: 1, b: undefined, c: function(){} })
// 结果:'{"a":1}'

十、JSON 与 JSON5

  • JSON:严格、适合 API 与跨语言协议
  • JSON5:支持注释、单引号、无引号键名、尾随逗号等,适合手写配置
  • 合法 JSON 一定是合法 JSON5;反之不成立

详见 JSON5 教程,在线验证见 JSON5 解析验证

十一、本站相关工具

十二、使用建议

  • 对外 API、数据库存储优先使用标准 JSON
  • 键名使用稳定的英文 camelCase 或 snake_case,团队内统一即可
  • 避免在同一对象中重复定义相同键(虽多数解析器取后者,但易掩盖错误)
  • 大整数、敏感数据注意精度与脱敏;格式化工具仅在浏览器本地处理,不上传服务器

十三、延伸阅读