协慌网

登录 贡献 社区

如何相印 JSON 文件?

我有一个 JSON 文件是一个混乱,我想漂亮 - 在 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
        ]
    }
]

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

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

您可以在命令行上执行此操作:

python3 -m json.tool < some.json

(正如在问题的评论中已经提到的,感谢 @Kai Petzke 提出的 python3 建议)。

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

我用jq 。以上可以通过以下方式完成:

jq '' < some.json

并且您将颜色作为奖励(并且更容易扩展)。

Pygmentize + Python json.tool = 使用语法突出显示的漂亮打印

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

我将 python json.tool 与 pygmentize 结合起来

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

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

这个演示如下图所示:

演示