Python中如何美化打印JSON文件(print json)

boyanx1个月前技术教程10

技术背景

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

实现步骤

使用json模块的dump或dumps方法

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

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

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

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

命令行方式

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

python3 -m json.tool some.json

也可以使用jq工具:

jq . some.json

使用pprint模块

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

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的输出添加语法高亮:

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

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

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格式。
标签: jqprint

相关文章

浏览器打印方案(浏览器直接打印)

前言在web端打印是比较常见的需求,实际工作中也接触了不少,在这里对工作中用到的做一下总结1.通过媒体查询隐藏元素通过style标签内联引入,或者使用媒体查询media="print"...

如何美化打印 JSON 文件(java格式化打印json)

在日常的编程和数据处理工作中,JSON(JavaScript Object Notation)文件是非常常见的。JSON 文件以一种轻量级的数据交换格式存在,方便不同系统之间的数据传输和存储。然而,原...

JavaEE概述总结:Servlet生命周期+JSP内置对象

前言Servlet生命周期JavaEE_01lifecycle学习任务: 浏览器的任务:请求,处理,响应 servlet任务:接收请求,通过对应的java代码处理请求,处理之后对其发出响应 se...

高清地图产品输出改进过程记录(高精度地图的生产过程)

背景最近两天站长压力很大,拿着我们地质灾害风险预警图给厅长签字,被拍桌子骂了。回来就给我们下了最后通牒,今天不给我弄出满意高清图,明天就去找另外公司搞。项目经理瞬间吓尿了。解决方案原来出图方案是前端选...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。