Python3 JSON解析完全指南
专为编程初学者设计的JSON解析知识点汇总,用通俗易懂的语言讲解Python中的JSON处理
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但使用了类似于JavaScript对象的结构。
JSON的主要特点:
- 易于人阅读和编写
- 易于机器解析和生成
- 基于JavaScript编程语言的子集
- 完全独立于编程语言
JSON数据示例
“name”: “张三”,
“age”: 28,
“is_student”: false,
“courses”: [“数学”, “英语”, “编程”],
“address”: {
“city”: “北京”,
“postal_code”: “100000”
}
}
Python处理JSON时,会自动进行数据类型转换:
JSON 类型 | Python 类型 | 示例 |
---|---|---|
对象 (object) | 字典 (dict) | {"name": "John"} → {'name': 'John'} |
数组 (array) | 列表 (list) | [1, 2, 3] → [1, 2, 3] |
字符串 (string) | 字符串 (str) | "hello" → 'hello' |
数字 (number) | 整数(int) 或 浮点数(float) | 42 → 42 , 3.14 → 3.14 |
布尔值 (true/false) | 布尔值 (True/False) | true → True , false → False |
null | None | null → None |
json_str = ‘{ “name”: “李四”, “age”: 35, “married”: true }’
# 使用json.loads()转换为Python字典
import json
data = json.loads(json_str)
# 输出: {‘name’: ‘李四’, ‘age’: 35, ‘married’: True}
Python内置了json
模块,无需额外安装,包含四个主要方法:
1. json.loads() – 解析JSON字符串
作用: 将JSON格式的字符串转换为Python数据类型(通常是字典)
使用场景: 从网络请求响应、文本文件中读取到JSON字符串时
# JSON字符串
json_string = ‘{“name”: “王五”, “age”: 25, “city”: “上海”}’
# 将JSON字符串解析为Python字典
data = json.loads(json_string)
# 访问解析后的数据
print(data[‘name’]) # 输出: 王五
print(data[‘age’]) # 输出: 25
2. json.dumps() – 生成JSON字符串
作用: 将Python数据类型(如字典)转换为JSON格式的字符串
使用场景: 需要将Python数据发送给其他程序或存入文件时
# Python字典
person = {
“name”: “赵六”,
“age”: 30,
“hobbies”: [“阅读”, “旅行”, “摄影”]
}
# 将Python字典转换为JSON字符串
json_data = json.dumps(person, ensure_ascii=False)
# 输出JSON字符串
print(json_data) # 输出: {“name”: “赵六”, “age”: 30, “hobbies”: [“阅读”, “旅行”, “摄影”]}
# 注意: ensure_ascii=False 确保中文字符正常显示
3. json.load() – 读取JSON文件
作用: 从文件对象中读取JSON数据并转换为Python数据类型
使用场景: 从JSON文件中读取数据
# 从文件读取JSON数据
with open(‘data.json’, ‘r’, encoding=‘utf-8’) as file:
data = json.load(file)
# 访问数据
print(data[‘company’]) # 假设data.json中有company字段
4. json.dump() – 写入JSON文件
作用: 将Python数据类型转换为JSON格式并写入文件对象
使用场景: 将Python数据保存为JSON文件
# Python字典
product = {
“id”: 101,
“name”: “笔记本电脑”,
“price”: 5999.99,
“in_stock”: True
}
# 将数据写入JSON文件
with open(‘product.json’, ‘w’, encoding=‘utf-8’) as file:
json.dump(product, file, ensure_ascii=False, indent=4)
# 文件内容:
#{
# “id”: 101,
# “name”: “笔记本电脑”,
# “price”: 5999.99,
# “in_stock”: true
#}
格式化输出
使用indent
参数让输出的JSON更易读:
按键排序
使用sort_keys
参数让JSON键按字母顺序排序:
处理自定义对象
使用default
参数处理JSON不支持的数据类型:
if isinstance(obj, datetime):
return obj.strftime(‘%Y-%m-%d’)
json_str = json.dumps(data, default=custom_converter)
加速处理
对于大型JSON数据,可使用第三方库加速:
ujson
– 更快的JSON处理orjson
– Rust编写的高性能JSON库
JSONDecodeError – JSON格式错误
原因: JSON字符串格式不正确(如缺少引号、逗号或花括号)
json_string = ‘{name: “张三”}’ # 应该为 ‘{“name”: “张三”}’
解决: 使用JSON验证工具检查格式
TypeError – 包含不支持的类型
原因: 尝试序列化JSON不支持的类型(如datetime对象)
“event”: “会议”,
“time”: datetime.now() # 错误!
}
json.dumps(data) # 引发TypeError
解决: 使用default
参数提供自定义转换函数
UnicodeEncodeError – 编码问题
原因: 处理非ASCII字符(如中文)时未正确设置编码
解决: 使用ensure_ascii=False
并指定文件编码
with open(‘data.json’, ‘w’, encoding=‘utf-8’) as f:
json.dump(data, f, ensure_ascii=False)
掌握JSON解析,开启数据处理之旅!
JSON是Web开发和数据交换的通用语言,掌握它是成为Python开发者的重要一步
本指南由Python爱好者整理 | 持续学习,不断进步