Python中如何美化打印JSON文件

Python中如何美化打印JSON文件

技术背景

在Python开发中,处理JSON数据是常见的任务。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当我们需要查看JSON数据的结构和内容时,将其美化打印(即格式化输出)可以提高可读性。

实现步骤

使用json模块的dumpdumps方法

json.dump()用于将JSON对象写入文件,json.dumps()用于将JSON对象转换为字符串。可以使用indent参数指定缩进的空格数。

1
2
3
4
import json
your_json = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
parsed = json.loads(your_json)
print(json.dumps(parsed, indent=4))

若要解析文件,可使用json.load()

1
2
3
with open('filename.txt', 'r') as handle:
parsed = json.load(handle)
print(json.dumps(parsed, indent=4))

命令行方式

可以使用Python内置的json.tool模块在命令行中美化打印JSON文件:

1
python3 -m json.tool some.json

也可以使用jq工具:

1
jq . some.json

使用pprint模块

pprint模块可以以人类友好的格式输出数据。

1
2
3
4
5
6
7
8
9
import json
import pprint

json_data = None
with open('file_name.txt', 'r') as f:
data = f.read()
json_data = json.loads(data)

pprint.pprint(json_data, compact=True)

使用pygmentize工具添加语法高亮

pygmentize是一个强大的终端命令输出着色工具,可以为json.tool的输出添加语法高亮:

1
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json

自定义函数处理不同类型的JSON输入

1
2
3
4
5
6
7
8
9
10
11
12
import json

def pp_json(json_thing, sort=True, indents=4):
if type(json_thing) is str:
print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
else:
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
return None

# 使用示例
your_json_string_or_dict = '{"key": "value"}'
pp_json(your_json_string_or_dict)

最佳实践

  • 对于简单的JSON数据,直接使用json.dumps()并设置indent参数是最方便的。
  • 在命令行中,jq工具不仅可以美化打印JSON,还能进行更复杂的JSON数据处理。
  • 如果需要在代码中处理不同类型的JSON输入(字符串或字典),可以使用自定义函数。

常见问题

  • pprint输出的不是有效的JSON格式pprint模块主要用于美化Python对象,其输出可能包含单引号,而JSON要求使用双引号。如果需要输出有效的JSON,建议使用json模块。
  • jq处理大文件时内存不足jq在处理非常大的JSON文件时可能会出现内存问题。对于大文件,可以考虑使用Python的json.tool模块。
  • pygmentize无法自动识别输入格式:在使用pygmentize时,需要明确指定-l json来指定输入为JSON格式。

Python中如何美化打印JSON文件
https://119291.xyz/posts/2025-04-14.pretty-print-json-file-in-python/
作者
ww
发布于
2025年4月14日
许可协议