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.14、1.2e+10 |
| 布尔 boolean | 仅 true 或 false,小写 |
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 | 制表符 |
\uXXXX | Unicode 码点(4 位十六进制) |
{
"quote": "他说:\"JSON 很好用\"",
"path": "C:\\data\\config.json",
"unicode": "JSONMe \u54c8\u54c8\u54c8",
"multiline": "第一行\n第二行"
}
本站 Unicode 中文互转、UTF8 中文互转 可辅助处理编码。
六、数字
- 不允许前导零(如
01非法,0与0.5合法) - 支持科学计数法:
1.23e-4、6.02e23 - 不支持
NaN、Infinity、-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 解析验证。
十一、本站相关工具
- JSON 格式化 — 美化、压缩、Key 排序、语法校验
- JSON 压缩转义 — 转义/Unescape、Unicode 转换
- JSON 对比 — 两份 JSON 差异比较
- JSON 排序 — 按 Key 递归排序
- JSON 转 Java — 生成 POJO 实体类
- JSON 转 YAML / YAML 转 JSON
- XML 转 JSON / JSON 转 XML
十二、使用建议
- 对外 API、数据库存储优先使用标准 JSON
- 键名使用稳定的英文 camelCase 或 snake_case,团队内统一即可
- 避免在同一对象中重复定义相同键(虽多数解析器取后者,但易掩盖错误)
- 大整数、敏感数据注意精度与脱敏;格式化工具仅在浏览器本地处理,不上传服务器
沪公网安备31010502007661号