使用json.dumps并设置indent参数可格式化JSON输出,提升可读性;通过indent指定缩进空格数,sort_keys=True确保键有序,separators压缩体积,ensure_ascii=False支持中文显示。

Python里要格式化输出JSON,让它看起来更规整、易读,核心就是用
json.dumps
indent
当我们处理JSON数据时,尤其是从API获取或者需要手动检查时,原始的JSON字符串往往是紧凑的,所有键值对都挤在一行,阅读起来简直是噩梦。
json.dumps
json
indent
比如,我们有一个字典:
data = {
"name": "张三",
"age": 30,
"isStudent": False,
"courses": [
{"title": "Python编程", "credits": 3},
{"title": "数据结构", "credits": 4}
],
"address": {
"street": "科技路123号",
"city": "北京",
"zipCode": "100000"
}
}如果直接
json.dumps(data)
{"name": "张三", "age": 30, "isStudent": false, "courses": [{"title": "Python编程", "credits": 3}, {"title": "数据结构", "credits": 4}], "address": {"street": "科技路123号", "city": "北京", "zipCode": "100000"}}现在,我们加入
indent
2
4
立即学习“Python免费学习笔记(深入)”;
import json
data = {
"name": "张三",
"age": 30,
"isStudent": False,
"courses": [
{"title": "Python编程", "credits": 3},
{"title": "数据结构", "credits": 4}
],
"address": {
"street": "科技路123号",
"city": "北京",
"zipCode": "100000"
}
}
# 使用indent=4进行格式化输出
formatted_json_output = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json_output)输出就会变得清晰明了:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
{
"title": "Python编程",
"credits": 3
},
{
"title": "数据结构",
"credits": 4
}
],
"address": {
"street": "科技路123号",
"city": "北京",
"zipCode": "100000"
}
}你看,是不是一下子就舒服多了?
indent
json.dumps
控制
json.dumps
indent
indent=2
indent=4
当你设置
indent=2
import json
data = {"a": 1, "b": {"c": 2, "d": [3, 4]}}
print(json.dumps(data, indent=2))输出:
{
"a": 1,
"b": {
"c": 2,
"d": [
3,
4
]
}
}而
indent=4
print(json.dumps(data, indent=4))
输出:
{
"a": 1,
"b": {
"c": 2,
"d": [
3,
4
]
}
}除了整数,
indent
indent='\t'
当然,如果你不设置
indent
None
json.dumps
JSON规范本身并没有规定对象(也就是Python里的字典)中键的顺序。这意味着,当你把一个Python字典转换为JSON字符串时,不同的Python版本、甚至在某些特定情况下,字典内部键的迭代顺序都可能影响到
json.dumps
为了解决这个问题,
json.dumps
sort_keys
sort_keys
True
json.dumps
举个例子:
import json
data_unordered = {
"beta": 2,
"alpha": 1,
"gamma": 3
}
# 不排序的输出(可能与原始顺序相同,也可能不同,取决于Python版本和字典实现)
print("不排序:", json.dumps(data_unordered, indent=2))
# 排序后的输出
print("排序后:", json.dumps(data_unordered, indent=2, sort_keys=True))输出可能会是这样:
不排序: {
"beta": 2,
"alpha": 1,
"gamma": 3
}
排序后: {
"alpha": 1,
"beta": 2,
"gamma": 3
}你看,通过
sort_keys=True
alpha
beta
beta
gamma
sort_keys=True
除了美化输出(
indent
sort_keys
json.dumps
1. 极致压缩输出:separators
如果你需要生成最紧凑的JSON字符串,例如为了网络传输效率或者存储空间,
indent
sort_keys
separators
separators
(item_separator, key_separator)
(', ', ': ')(',', ':')import json
data = {"name": "张三", "age": 30, "city": "北京"}
# 默认输出 (带空格)
print("默认:", json.dumps(data))
# 紧凑输出 (无空格)
print("紧凑:", json.dumps(data, separators=(',', ':')))输出:
默认: {"name": "张三", "age": 30, "city": "北京"}
紧凑: {"name":"张三","age":30,"city":"北京"}这样,原本在逗号和冒号后面的空格都被移除了,字符串长度会进一步缩短。这在处理大量JSON数据时,哪怕只是微小的优化,累积起来也能节省不少资源。
2. 优雅处理非ASCII字符:ensure_ascii
默认情况下,
json.dumps
\uXXXX
import json
data_chinese = {"message": "你好,世界!"}
# 默认输出 (中文被转义)
print("默认 (转义):", json.dumps(data_chinese))输出:
默认 (转义): {"message": "\u4f60\u597d\uff0c\u4e16\u754c\uff01"}但很多时候,我们希望JSON字符串能直接显示这些非ASCII字符,尤其是在日志、调试输出或者明确知道接收方能正确处理UTF-8编码时。这时,可以将
ensure_ascii
False
# 不转义输出 (中文直接显示)
print("不转义:", json.dumps(data_chinese, ensure_ascii=False, indent=2))输出:
不转义: {
"message": "你好,世界!"
}这样,中文就能直接在JSON字符串中显示了,阅读起来更加直观。不过,使用
ensure_ascii=False
ensure_ascii=False
以上就是Python怎么用json.dumps格式化输出_json.dumps美化与格式化JSON输出的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号