Python 打印 JSON 数据时如何优雅地添加换行符与缩进?**
在 Python 开发中,我们经常需要处理和调试 JSON 数据,当使用 print() 函数直接打印一个 JSON 对象(通常是 Python 的 dict 或 list)时,默认的输出往往是一行紧凑的字符串,可读性较差。
import json
data = {
"name": "张三",
"age": 30,
"isStudent": False,
"courses": ["数学", "物理"],
"address": {
"city": "北京",
"district": "海淀区"
}
}
print(data)
输出结果可能类似于:
{'name': '张三', 'age': 30, 'isStudent': False, 'courses': ['数学', '物理'], 'address': {'city': '北京', 'district': '海淀区'}}
这样的输出在数据结构简单时尚可接受,但一旦数据复杂或嵌套层级深,就难以快速理解和排查问题。
为了提升 JSON 数据的可读性,我们希望打印出来的格式是带有换行符和适当缩进的“美化打印”(Pretty Print)形式,Python 的 json 模块为我们提供了非常便捷的实现方式。
核心方法:json.dumps() 的 indent 和 ensure_ascii 参数
json 模块中的 dumps() (dump string) 函数可以将 Python 对象转换为 JSON 格式的字符串,它有两个关键参数可以帮助我们实现美化打印:
-
indent参数:- 作用:指定缩进使用的空格数,如果是一个非负整数,JSON 数组元素和对象成员将会被以此数字为单位的空格缩进,使得输出更加美观。
- 示例:
indent=4表示使用 4 个空格进行缩进。
-
ensure_ascii参数:- 作用:默认值为
True,此时所有非 ASCII 字符(如中文)都会被转义为\uXXXX的形式,如果设为False,则非 ASCII 字符会原样输出,这在处理包含中文等多语言文本的 JSON 时非常有用,可读性更高。
- 作用:默认值为
实践示例
让我们使用上述参数来美化打印之前的 data 对象:
import json
data = {
"name": "张三",
"age": 30,
"isStudent": False,
"courses": ["数学", "物理"],
"address": {
"city": "北京",
"district": "海淀区"
}
}
# 使用 json.dumps() 并指定 indent 和 ensure_ascii
pretty_json_str = json.dumps(data, indent=4, ensure_ascii=False)
# 打印美化后的 JSON 字符串
print(pretty_json_str)
输出结果:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
"数学",
"物理"
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
可以看到,输出结果已经自动换行,并且根据嵌套层级进行了 4 个空格的缩进,中文也正常显示,可读性大大提升。
其他实用技巧
使用 sort_keys 参数对键进行排序
当 JSON 对象的键较多时,为了保持输出的一致性,可以启用 sort_keys=True,这样输出的 JSON 对象的键会按字母顺序排序。
sorted_json_str = json.dumps(data, indent=4, ensure_ascii=False, sort_keys=True) print(sorted_json_str)
输出中 "address"、"age"、"courses" 等键会按字母顺序排列。
直接打印到文件(json.dump())
如果你不仅想在控制台打印,还想将美化后的 JSON 数据保存到文件中,可以使用 json.dump() 函数(注意没有 s),它直接将对象序列化并写入文件流。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
执行后,当前目录下会生成一个 data.json 文件,内容就是格式化后的 JSON 数据。
结合 pprint 模块(简单场景)
对于非常简单的 JSON 结构(或 Python 字典/列表),也可以使用 Python 标准库 pprint (Pretty Print) 模块,它能提供基本的格式化打印。
from pprint import pprint pprint(data)
但对于复杂的嵌套 JSON 或需要严格 JSON 格式(如布尔值为 true/false 而非 True/False)的场景,json.dumps() 仍然是更优选择。
要在 Python 中打印带有换行符和缩进的可读 JSON 数据,最推荐的方法是使用 json.dumps() 函数,并通过以下参数进行控制:
indent:指定缩进空格数,实现换行和缩进。ensure_ascii=False:确保非 ASCII 字符(如中文)原样输出。sort_keys=True:可选,对 JSON 键进行排序。
这一技巧,不仅能提升调试效率,也能让你的日志输出或数据导出更加专业和易读。



还没有评论,来说两句吧...