什么是JSON以及为何需要解析它
JSON(JavaScript对象表示法)是一种轻量级的文本数据交换格式,已成为应用程序间信息传输的标准。尽管名称中包含JavaScript,但JSON并不依赖于JavaScript,而是被所有现代编程语言广泛使用。
JSON的主要优势:
- 人类可读的格式
- 简单的数据结构
- 通用支持性
- 相比XML更加紧凑
JSON对象示例:
{
"name": "Alice",
"age": 30,
"is_active": true,
"hobbies": ["reading", "cycling", "traveling"]
}
Python内置的json模块
Python提供了强大的内置json模块来处理JSON数据。该模块支持两种核心操作:
- 反序列化 — 将JSON字符串转换为Python对象
- 序列化 — 将Python对象转换为JSON字符串
首先导入模块:
import json
将JSON字符串解析为Python对象
使用json.loads()
json.loads()函数(load string)将JSON字符串转换为对应的Python对象:
import json
json_data = '{"name": "Bob", "age": 25, "is_active": false}'
parsed_data = json.loads(json_data)
print(parsed_data) # {'name': 'Bob', 'age': 25, 'is_active': False}
print(type(parsed_data)) # <class 'dict'>
解析后,你可以像操作普通字典一样使用数据:
print(parsed_data['name']) # Bob
print(parsed_data['age']) # 25
数据类型对应关系
JSON类型会自动转换为Python类型:
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number | int/float |
| true/false | True/False |
| null | None |
将Python对象转换为JSON
使用json.dumps()
json.dumps()函数将Python对象转换为JSON字符串:
data = {'name': 'Alice', 'age': 30, 'is_active': True}
json_string = json.dumps(data)
print(json_string) # {"name": "Alice", "age": 30, "is_active": true}
格式化参数
使用额外参数提升可读性:
data = {'name': 'Alice', 'age': 30, 'city': '北京'}
json_pretty = json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False)
print(json_pretty)
主要参数说明:
indent— 缩进格式化sort_keys— 键排序ensure_ascii— 支持Unicode字符
处理JSON文件
从文件读取JSON
使用json.load()从文件读取JSON数据:
with open('data.json', 'r', encoding='utf-8') as file:
content = json.load(file)
print(content)
将JSON写入文件
json.dump()函数将数据写入文件:
data = {'city': '北京', 'temperature': -5, 'weather': '雪'}
with open('weather.json', 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4, ensure_ascii=False)
文件操作建议
- 始终指定编码