一、JSON 是什么?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由 Douglas Crockford 于 2001 年提出,旨在替代 XML 成为更高效的 Web 数据传输标准。它基于 JavaScript 对象字面量的子集,但独立于编程语言,凭借简洁的语法和跨平台特性,迅速成为现代软件开发的事实标准。
核心特性:
- 轻量级 :仅用文本字符(如
{}
、[]
、:
)表示数据,无冗余标签,文件体积小。 - 跨语言兼容:几乎所有编程语言(Java、Python、C# 等)均内置 JSON 解析库。
- 结构清晰:支持对象(无序键值对)和数组(有序值列表)两种基础结构,可嵌套使用。
二、JSON 的语法规则
JSON 的语法设计简洁优雅,遵循以下规则:
1. 基础结构
-
对象 :用花括号
{}
包裹,键值对之间用逗号分隔,键必须为字符串(双引号包裹)。{ "name": "张三", "age": 30, "isStudent": false }
-
数组 :用方括号
[]
包裹,元素间用逗号分隔。[15, 23, "北京", true]
2. 数据类型
JSON 支持 6 种基本类型:
- 数值 :整数或浮点数(如
3.14
、-42
)。 - 字符串 :必须用双引号包裹(如
"北京"
),支持 Unicode 和转义字符(如 )。 - 布尔值 :
true
或false
。 - 空值 :
null
。 - 对象:键值对集合。
- 数组:有序值列表。
3. 严格语法
- 键值对间必须用逗号分隔,但最后一个元素后不可加逗号。
- 字符串必须用双引号,单引号无效。
- 不支持注释(与 XML 不同)。
三、JSON 的应用场景
1. Web 开发
-
API 通信 :RESTful API 普遍采用 JSON 格式返回数据,例如:
{ "id": 1, "title": "JSON 入门指南", "author": "张三" }
-
前端交互:通过 AJAX 异步加载数据,动态更新页面内容。
2. 配置文件
- 应用程序配置(如
package.json
、tsconfig.json
)使用 JSON 存储参数,结构清晰易读。 - 数据库配置、环境变量等场景也广泛依赖 JSON。
3. NoSQL 数据库
-
MongoDB 等文档型数据库直接以 BSON(类似 JSON 的二进制格式)存储数据。
{ "_id": "12345", "name": "用户A", "orders": [1001, 1002] }
4. 跨平台通信
- 物联网设备、移动端与服务器之间的数据传输。
- 微服务架构中服务间的 RPC 调用。
四、JSON 与 XML 的对比
特性 | JSON | XML |
---|---|---|
语法简洁性 | 无冗余标签,体积更小 | 标签嵌套复杂,文件体积大 |
解析速度 | 原生支持,解析速度快 | 需解析器转换,速度较慢 |
数据类型 | 支持数值、布尔值等原生类型 | 所有值均为字符串,需额外解析 |
注释支持 | 不支持 | 支持(<!-- 注释 --> ) |
五、JSON 的局限性
- 无法直接表示复杂类型:如函数、日期对象需转为字符串处理。
- 无标准注释语法:需通过第三方库扩展支持。
- 数据量过大时性能下降:嵌套层级过深可能影响解析效率。
六、实战示例:Python 操作 JSON
import json
# JSON 字符串转 Python 对象
data_str = '{"name": "李四", "age": 25}'
data = json.loads(data_str)
print(data["name"]) # 输出:李四
# Python 对象转 JSON 字符串
person = {"name": "王五", "hobbies": ["阅读", "篮球"]}
json_str = json.dumps(person, indent=2, ensure_ascii=False)
print(json_str)
# 输出:
# {
# "name": "王五",
# "hobbies": ["阅读", "篮球"]
# }
总结
JSON 凭借其简洁性、跨语言兼容性和高效解析能力,成为现代数据交换的通用标准。无论是 Web 开发、配置管理还是分布式系统通信,JSON 都扮演着关键角色。