本文目录导读:

在Python中解析JSON数据非常简单,因为Python内置了json模块,下面通过几个案例详细说明。
基础用法:解析JSON字符串
import json
# JSON字符串
json_str = '{"name": "张三", "age": 25, "city": "北京"}'
# 解析JSON字符串为Python字典
data = json.loads(json_str)
print(data) # {'name': '张三', 'age': 25, 'city': '北京'}
print(type(data)) # <class 'dict'>
print(data['name']) # 张三
从文件读取JSON
import json
# 假设有一个 data.json 文件
# {
# "users": [
# {"name": "李四", "age": 30},
# {"name": "王五", "age": 28}
# ]
# }
# 读取并解析JSON文件
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 访问数据
for user in data['users']:
print(f"姓名: {user['name']}, 年龄: {user['age']}")
处理复杂嵌套JSON
import json
complex_json = '''
{
"company": "ABC科技",
"employees": [
{
"id": 1,
"name": "赵六",
"skills": ["Python", "Java", "SQL"],
"address": {
"city": "上海",
"street": "南京路"
}
},
{
"id": 2,
"name": "钱七",
"skills": ["JavaScript", "HTML", "CSS"],
"address": {
"city": "北京",
"street": "长安街"
}
}
]
}
'''
data = json.loads(complex_json)
# 遍历employees
for emp in data['employees']:
print(f"员工: {emp['name']}")
print(f"技能: {', '.join(emp['skills'])}")
print(f"城市: {emp['address']['city']}")
print("---")
处理网络API返回的JSON
import json
import requests # 需要安装: pip install requests
# 示例:获取天气API数据
response = requests.get('https://api.example.com/weather')
weather_data = response.json() # 直接解析为Python对象
# 或者使用json模块
weather_data = json.loads(response.text)
print(f"温度: {weather_data['main']['temp']}°C")
print(f"湿度: {weather_data['main']['humidity']}%")
JSON到Python类型映射
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number (int) | int |
| number (float) | float |
| true | True |
| false | False |
| null | None |
import json
json_data = '''
{
"string": "hello",
"integer": 42,
"float": 3.14,
"boolean_true": true,
"boolean_false": false,
"null_value": null,
"array": [1, 2, 3],
"nested": {"key": "value"}
}
'''
parsed = json.loads(json_data)
print(parsed['string']) # hello
print(parsed['integer']) # 42
print(parsed['boolean_true']) # True
print(parsed['null_value']) # None
错误处理
import json
invalid_json = '{"name": "张三", age: 25}' # 缺少引号
try:
data = json.loads(invalid_json)
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
print(f"错误位置: 第{e.lineno}行, 第{e.colno}列")
将Python对象转换为JSON(序列化)
import json
# Python字典
data = {
"name": "小明",
"age": 20,
"languages": ["Python", "JavaScript"],
"is_student": True
}
# 转换为JSON字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
# 写入文件
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
实用技巧
import json
# 1. 格式化JSON输出
print(json.dumps(data, indent=2, sort_keys=True))
# 2. 处理中文
print(json.dumps(data, ensure_ascii=False)) # 显示中文而不是Unicode转义
# 3. 自定义对象序列化
from datetime import datetime
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {
"timestamp": datetime.now()
}
json_str = json.dumps(data, cls=CustomEncoder)
print(json_str)
json.loads(): 解析JSON字符串json.load(): 从文件读取JSONjson.dumps(): Python对象转JSON字符串json.dump(): Python对象写入JSON文件- 始终使用
try-except处理可能的JSON解析错误 - 处理中文时设置
ensure_ascii=False
这些是Python中处理JSON最常用的方法,掌握了这些就足以应对大多数JSON解析场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播