如何美化打印JSON文件?

如何美化打印JSON文件?

技术背景

在开发过程中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。当处理JSON数据时,原始的JSON字符串可能难以阅读和调试。因此,需要对JSON数据进行美化打印,使其具有良好的缩进和格式,便于查看和分析。

实现步骤

使用json.dump()json.dumps()

可以使用Python的json模块中的dump()dumps()函数,并通过indent参数指定缩进的空格数。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> import json
>>> your_json = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print(json.dumps(parsed, indent=4))
[
"foo",
{
"bar": [
"baz",
null,
1.0,
2
]
}
]

解析文件

若要解析JSON文件,可使用json.load()函数。示例代码如下:

1
2
with open('filename.txt', 'r') as handle:
parsed = json.load(handle)

命令行操作

在命令行中,可以使用以下命令美化打印JSON文件:

1
python3 -m json.tool some.json

使用jq工具

jq是一个强大的JSON处理工具,可用于美化打印JSON数据,并提供颜色高亮。使用方法如下:

1
jq . some.json

使用pprint模块

pprint模块可用于美观地打印Python数据结构。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import json
import pprint

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

# 以人类友好的格式将JSON打印到屏幕
pprint.pprint(json_data, compact=True)

# 以人类友好的格式将JSON写入文件
pretty_json_str = pprint.pformat(json_data, compact=True).replace("'", '"')

with open('file_name.json', 'w') as f:
f.write(pretty_json_str)

使用pygmentize工具

pygmentize可用于为终端命令的输出添加语法高亮。示例代码如下:

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

自定义函数

可以编写一个自定义函数,处理JSON字符串或字典类型的数据并进行美化打印。示例代码如下:

1
2
3
4
5
6
7
8
9
10
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

pp_json(your_json_string_or_dict)

使用pprintjson

pprintjson是一个用于美化打印JSON数据的库。安装和使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装
$ pip3 install pprintjson

# 从文件中美化打印JSON
$ pprintjson "./path/to/file.json"

# 从标准输入美化打印JSON
$ echo '{ "a": 1, "b": "string", "c": true }' | pprintjson

# 从字符串中美化打印JSON
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }'

# 从字符串中美化打印JSON,并指定缩进为1
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -i 1

# 从字符串中美化打印JSON,并将输出保存到文件
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -o ./output.json

使用rich

rich库可以用于美化打印JSON数据,并提供高亮显示。示例代码如下:

1
2
3
4
5
6
from rich import print_json
import json

setup_type = open('config.json')
data = json.load(setup_type)
print_json(data=data)

核心代码

以下是一些核心代码示例:

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

# 使用json.dumps()美化打印JSON
your_json = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
parsed = json.loads(your_json)
print(json.dumps(parsed, indent=4))

# 使用pprint美化打印JSON
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)

最佳实践

  • 选择合适的工具:根据具体需求选择合适的工具进行JSON美化打印。如果只是简单的美化打印,使用json.dumps()jq即可;如果需要更多功能,如高亮显示,可以使用pygmentizerich库。
  • 处理异常:在解析JSON数据时,可能会出现解析错误。因此,建议在代码中添加异常处理机制,避免程序崩溃。
  • 自定义函数:如果需要频繁进行JSON美化打印,可以编写一个自定义函数,提高代码的复用性。

常见问题

  • JSON解析错误:当JSON数据格式不正确时,会出现解析错误。可以使用try-except语句捕获JSONDecodeError异常,并进行相应的处理。
  • 单引号问题:在使用pprint模块时,输出的字符串可能会包含单引号,而单引号在JSON中是无效的。需要将单引号替换为双引号。
  • 内存问题:当处理大型JSON文件时,可能会出现内存不足的问题。可以考虑使用流式处理或分块处理的方式,减少内存占用。

如何美化打印JSON文件?
https://119291.xyz/posts/how-to-prettyprint-a-json-file/
作者
ww
发布于
2025年5月23日
许可协议