【JSON 】全面掌握JSON的相关知识
🎯 JSON 全面学习指南
JSON(JavaScript Object Notation)是轻量级的数据交换格式,广泛应用于 Web API、配置文件和跨平台数据传输。以下是系统性学习 JSON 的完整路径:
一、JSON 基础语法
1. 数据结构
- 对象(Object):
{ "key": value }
- 键必须用双引号包裹,值可以是任何类型。
- 数组(Array):
[1, "text", true]
- 有序的元素集合。
- 值(Value): 支持类型:
{"string": "文本","number": 123.45,"boolean": true,"null": null,"object": { "嵌套": "对象" },"array": [1, 2, 3] }
2. 语法规则
- 所有键(Key)必须用双引号包裹。
- 值间用逗号分隔,最后一个元素不能有逗号。
- 使用 UTF-8 编码,支持 Unicode 字符(如中文、Emoji)。
- 示例:
{"name": "张三","age": 30,"skills": ["Python", "SQL", "JSON"],"isStudent": false,"address": {"city": "北京","zipcode": "100000"} }
二、JSON 与编程语言
1. Python
-
序列化(对象 → JSON 字符串)
import json data = {"name": "Alice", "age": 25} json_str = json.dumps(data, indent=2, ensure_ascii=False)
indent
: 格式化缩进。ensure_ascii=False
: 允许输出非 ASCII 字符(如中文)。
-
反序列化(JSON 字符串 → 对象)
json_str = '{"name": "Alice", "age": 25}' data = json.loads(json_str)
-
处理文件
# 写入 JSON 文件 with open("data.json", "w", encoding="utf-8") as f:json.dump(data, f)# 读取 JSON 文件 with open("data.json", "r") as f:data = json.load(f)
2. JavaScript
-
序列化
const data = { name: "Bob", age: 30 }; const jsonStr = JSON.stringify(data, null, 2);
-
反序列化
const jsonStr = '{"name": "Bob", "age": 30}'; const data = JSON.parse(jsonStr);
三、进阶应用场景
1. 处理复杂数据类型
-
日期对象:需手动转换为字符串(如
"2023-10-05T12:00:00Z"
)。 -
自定义对象:定义
default
和object_hook
方法处理序列化/反序列化。class User:def __init__(self, name, age):self.name = nameself.age = age# 自定义序列化 def user_encoder(obj):if isinstance(obj, User):return {"name": obj.name, "age": obj.age, "_type": "User"}raise TypeError("Object not serializable")user = User("Alice", 25) json_str = json.dumps(user, default=user_encoder)
2. JSON Schema 验证
- 定义 JSON 结构规范,确保数据合法性。
- 示例:验证用户数据格式
{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","properties": {"name": { "type": "string" },"age": { "type": "number", "minimum": 0 }},"required": ["name", "age"] }
3. 流式处理大型 JSON 文件
- 使用
ijson
(Python)按需解析,避免内存溢出。import ijson with open("large_data.json", "r") as f:for item in ijson.items(f, "item"):process(item)
四、JSON 工具推荐
工具 | 用途 | 链接 |
---|---|---|
JSONLint | 在线验证和格式化 | jsonlint.com |
Postman | API 测试与 JSON 调试 | postman.com |
jq (命令行) | 终端下的 JSON 处理工具 | stedolan.github.io/jq |
JSON Viewer Pro | Chrome 插件,格式化 JSON | Chrome 应用商店 |
五、JSON 常见问题
1. 常见错误
- 多余逗号:
{ "a": 1, "b": 2, }
→ 最后一个逗号导致解析失败。 - 键未用双引号:
{ name: "Alice" }
→ 应为{ "name": "Alice" }
。 - 注释问题: JSON 标准不支持注释,但某些解析器允许
//
或/* */
。
2. JSON 与其他格式对比
格式 | 优点 | 缺点 |
---|---|---|
JSON | 简洁、易读、跨语言支持 | 不支持注释、无严格数据类型 |
XML | 支持注释、命名空间、复杂结构 | 冗余、解析复杂度高 |
YAML | 支持注释、更人性化的语法 | 缩进敏感、解析速度稍慢 |
六、实战练习
1. 解析天气预报 API 数据
import requests
response = requests.get("https://api.weather.com/data/forecast")
data = response.json()
print(f"温度: {data['current']['temp']}℃")
2. 生成动态配置
{"app": {"debug_mode": true,"max_users": 1000,"features": ["login", "search", "payment"]}
}
通过系统掌握 JSON 的语法、工具和实际应用,你将能高效处理各种数据交换需求! 🌟