📘 一站式详解:什么是 JSON?
一、🌟 JSON 的定义
JSON(JavaScript Object Notation) 是一种基于文本的、用于结构化数据表示的格式。它来源于 JavaScript,但现在是独立于语言的通用格式。
- 用来表示数据结构:如对象、数组、键值对。
- 最常用于:前后端数据交互、配置文件、数据存储、API 响应等。
✅ 官方定义(来自 json.org):
“JSON is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.”
二、📦 JSON 的结构和语法
JSON 支持两种基本结构:
1. 对象(Object)
- 用
{}
包裹
- 内部是键值对
- 键必须是字符串,值可以是任意 JSON 支持的数据类型
1 2 3 4 5
| { "name": "Tom", "age": 20, "isStudent": true }
|
2. 数组(Array)
1 2 3 4 5
| [ "apple", "banana", "orange" ]
|
三、🔤 JSON 支持的数据类型
数据类型 |
示例 |
描述 |
字符串 |
"Hello" |
使用双引号,不能用单引号 |
数字 |
100 , 3.14 |
不支持 NaN、Infinity |
布尔值 |
true , false |
小写 |
null |
null |
表示空值 |
对象 |
{...} |
键值对集合 |
数组 |
[...] |
值的有序列表 |
四、🚫 JSON 的语法限制
- 键必须加双引号,不能省略或用单引号(不同于 JS)。
- 不能包含函数、undefined、注释。
- 结尾不能多逗号(trailing comma)。
- 必须是 UTF-8 编码的字符串。
错误示例(无效的 JSON):
1 2 3 4
| { name: 'Tom', // ❌ 键没有双引号,值是单引号,含注释 age: 18, }
|
五、🔁 JSON 在编程语言中的处理
✅ JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // JS 对象 let person = { name: "Alice", age: 25 };
// 转成 JSON 字符串 let jsonStr = JSON.stringify(person); console.log(jsonStr); // '{"name":"Alice","age":25}'
// 从 JSON 字符串解析成对象 let obj = JSON.parse(jsonStr); console.log(obj.name); // Alice
|
✅ Python(使用 json 模块)
1 2 3 4 5
| import json
data = {"name": "Tom", "age": 18} json_str = json.dumps(data) new_data = json.loads(json_str)
|
几乎所有主流语言(Java、C#、Go、PHP 等)都有 JSON 解析库。
六、📡 JSON 的常见用途
场景 |
说明 |
前后端通信 |
Web 开发中前端从服务器获取或提交数据 |
Web API 响应格式 |
RESTful 接口默认使用 JSON |
配置文件 |
比如 package.json 、tsconfig.json |
本地存储 |
存储结构化数据到 localStorage、文件系统等 |
跨平台数据交换 |
各语言间共享数据 |
七、📊 JSON 与其他数据格式的比较
格式 |
可读性 |
体积 |
支持结构 |
支持注释 |
跨语言兼容 |
JSON |
✅ 好 |
中 |
✅ 好 |
❌ 无 |
✅ 强 |
XML |
❌ 差 |
大 |
✅ 强 |
✅ 有 |
✅ 强 |
YAML |
✅ 强 |
小 |
✅ 强 |
✅ 有 |
✅ 强 |
CSV |
✅ 强 |
小 |
❌ 差 |
❌ 无 |
✅ 强 |
八、🧨 JSON 常见错误
错误 |
示例 |
键未加引号 |
{name: "Tom"} ❌ |
使用单引号代替双引号 |
{'name': 'Tom'} ❌ |
多余的逗号 |
{ "a": 1, } ❌ |
不支持函数或 undefined |
{ "data": undefined } ❌ |
JSON 字符串不是合法对象或数组 |
"Tom" (不是一个对象或数组)❌ |