Python对JSON格式化的多种方法
作者:detayun
JSON作为Web开发中最常用的数据交换格式,其可读性和格式规范性对开发调试至关重要,本文将详细介绍Python中格式化JSON的多种方法,帮助开发者高效处理JSON数据,需要的朋友可以参考下
引言
JSON作为Web开发中最常用的数据交换格式,其可读性和格式规范性对开发调试至关重要。本文将详细介绍Python中格式化JSON的多种方法,帮助开发者高效处理JSON数据。
一、基础格式化方法
1. 使用标准库json模块
import json
data = {"name": "张三", "age": 25, "skills": ["Python", "Java"]}
# 基本格式化
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)
# 输出结果:
"""
{
"name": "张三",
"age": 25,
"skills": [
"Python",
"Java"
]
}
"""
关键参数说明:
indent:缩进空格数(推荐2或4)ensure_ascii:设为False可显示中文sort_keys:设为True可按键名排序
2. 紧凑格式化
compact_json = json.dumps(data, separators=(',', ':'))
# 输出:{"name":"张三","age":25,"skills":["Python","Java"]}
二、高级格式化技巧
1. 自定义格式处理器
def pretty_json(obj):
return json.dumps(obj,
indent=2,
sort_keys=True,
ensure_ascii=False,
separators=(',', ': '))
print(pretty_json(data))
2. 处理复杂数据结构
from datetime import datetime
complex_data = {
"timestamp": datetime.now(),
"nested": {"a": 1, "b": [1, 2, 3]}
}
# 自定义序列化
def default_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError("Type not serializable")
print(json.dumps(complex_data, default=default_serializer, indent=2))
三、文件操作
1. 写入格式化JSON文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
2. 读取并格式化
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(json.dumps(loaded_data, indent=2))
四、命令行工具
Python自带JSON格式化工具:
# 格式化文件
python -m json.tool input.json output.json
# 管道操作
echo '{"name":"李四","age":30}' | python -m json.tool
五、第三方库推荐
- json5(支持注释等扩展语法)
import json5
data = json5.loads("""{
// 注释
name: "王五",
age: 28
}""")
- demjson(容错性更强)
import demjson
# 自动修复格式错误
data = demjson.decode("{'key': 'value',}")
六、常见问题解决
- 中文乱码问题
# 错误写法 json.dumps(data) # 中文会变成Unicode转义 # 正确写法 json.dumps(data, ensure_ascii=False)
- 日期格式处理
from datetime import datetime
def datetime_handler(x):
if isinstance(x, datetime):
return x.isoformat()
raise TypeError("Unknown type")
json.dumps(data, default=datetime_handler)
- 大数据量格式化优化
# 使用ijson进行流式处理
import ijson
with open('large.json', 'rb') as f:
for item in ijson.items(f, 'item'):
print(json.dumps(item, indent=2))
七、格式化验证
def validate_json(json_str):
try:
json.loads(json_str)
return True
except json.JSONDecodeError as e:
print(f"格式错误:{str(e)}")
return False
总结
Python提供了多种JSON格式化方案:
- 基础需求使用标准库
json模块 - 复杂场景选择
json5或demjson - 大数据量使用流式处理库
ijson - 命令行操作使用
python -m json.tool
根据具体需求选择合适的方法,合理设置indent、sort_keys等参数,可以显著提升JSON数据的可读性和可维护性。建议始终设置ensure_ascii=False以获得更好的中文显示效果。
以上就是Python对JSON格式化的多种方法的详细内容,更多关于Python对JSON格式化的资料请关注脚本之家其它相关文章!
