如何打印JSON文件?

我有一个JSON文件,这是一个混乱,我想prettyprint – 什么是在Python中做到这一点最简单的方法? 我知道PrettyPrint需要一个“对象”,我认为它可以是一个文件,但我不知道如何传递文件 – 只是使用文件名不起作用。

json模块已经用indent参数实现了一些基本的漂亮打印:

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

要parsing文件,请使用json.load

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

你可以在命令行上做到这一点:

 cat some.json | python -m json.tool 

(正如在问题的评论中已经提到的那样)。

实际上python并不是我最喜欢的工具,只要在命令行上处理json就可以了。 对于简单漂亮的打印是好的,但如果你想操纵JSON,可能会变得过于复杂。 你很快就需要编写一个单独的脚本文件,你最终可以得到键是“一键”(python unicode)的地图,这使得select字段变得更加困难,并且不会真正走向漂亮的方向 – 印刷。

我用jq 。 以上可以做到:

 cat some.json | jq '' 

你会得到颜色作为奖励(和方式更容易扩展)。

Pygmentize + Python json.tool =漂亮的打印与语法高亮

Pygmentize是一个杀手工具。 看到这个

我结合python json.tool与pygmentize

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

请参阅上面的pygmentize安装说明的链接。

这个示例如下图所示:

演示

使用这个函数,不要忘记,如果你的JSON再次是一个strdict – 只要看看漂亮的打印:

 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) 

为了能够从命令行漂亮的打印,并能够控制缩进等,你可以设置一个别名类似这样的:

 alias jsonpp="python -c 'import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)'" 

然后以这些方式之一使用别名:

 cat myfile.json | jsonpp jsonpp < myfile.json