一、JSON 是什么?核心概念与语法解析
JSON,即 JavaScript 对象表示法,是一种轻量级、跨语言、纯文本的数据交换格式 。它诞生于 JavaScript 生态,但如今已成为所有编程语言通用的 “数据普通话”—— 无论前端、后端,还是 Python、Java,都能无障碍解析和生成 JSON。
1、JSON 的基本结构特点:
- 对象(Object):用
{}
包裹,由键值对组成,键必须是字符串,值可以是任意合法的 JSON 数据类型。{ "name": "Kooboo" }
- 嵌套对象:对象的值可以是另一个对象,形成嵌套结构。
{ "name": "Kooboo", "url": "https://www.kooboo.cn" }
- 数组:
[]
包裹的 “有序列表”对象的值可以是另一个对象,形成嵌套结构。{ "hobbies": ["reading", "coding", 100] // 数组里可以混合数据类型(字符串、数字),甚至嵌套对象/数组 }
- 其他数据类型:值也可以是数组(
[]
)、字符串、数字、布尔值(true
/false
)或null
。{ "hobbies": ["reading", "coding", 100] // 数组里可以混合数据类型(字符串、数字),甚至嵌套对象/数组 }
2. 语法规则:键值对 + 嵌套结构
JSON 的所有数据都基于 “对象(Object)” 和 “数组(Array)” 构建,支持无限嵌套:
{
"user": { // 对象(描述一个事物的属性)
"name": "Alice", // 字符串(键必须双引号,值也双引号)
"age": 25, // 数字(无引号)
"isStudent": false, // 布尔(true/false,小写)
"hobbies": ["reading", "coding"] // 数组(有序列表,可嵌套对象/数组)
},
"score": null // null表示空值(区别于JS的undefined)
}
核心规则:
- 键必须用 双引号 包裹(如
"name"
,不能用单引号或省略); - 值支持 6 种类型:字符串、数字、布尔、
null
、对象、数组; - 数组用
[]
,对象用{}
,嵌套时结构清晰。
3. 和 JavaScript 对象的区别
很多人混淆 JSON 和 JS 对象,其实:
- JSON 是 “文本”(纯字符串,必须符合语法),而JS 对象是 “内存结构”(可存函数、undefined,键可无引号);
- 两者可通过
JSON.parse()
(JSON→JS 对象)和JSON.stringify()
(JS 对象→JSON)互相转换。
4. 为什么流行?—— 解决 3 大痛点
- 跨语言兼容:后端 Python、前端 JavaScript、移动端 Java 都能无缝解析;
- 网络传输高效:相比 XML,JSON 冗余少(无闭合标签),传输更快;
- 开发友好:前端可直接把 JSON 当对象用,无需额外转换。
三、JSON 对比 XML:为什么它能成为主流?
在 JSON 普及前,XML 是主流数据交换格式,但 JSON 凭借以下优势实现 “逆袭”:
特性 | JSON | XML |
---|---|---|
语法复杂度 | 简单(仅键值对、对象、数组) | 复杂(标签、属性、命名空间) |
数据体积 | 小(无冗余标签) | 大(标签重复嵌套) |
解析效率 | 高(机器解析更快) | 低(需处理标签层级) |
可读性 | 强(文本格式直观) | 较弱(标签繁多) |
跨语言支持 | 原生支持,库成熟 | 需要额外解析工具 |
四、总结:JSON 是 “数据的语言”,编辑器是 “翻译器”
JSON 让不同系统能统一理解数据,而 JSON 编辑器让人类能高效操作 JSON—— 从避免语法错误,到可视化浏览嵌套结构,再到自动生成测试数据,工具的进化始终围绕 “降低开发成本”。