关于python:如何prettyprint a JSON文件?

How to prettyprint a JSON file?

我有一个JSON文件,它是一个混乱的文件,我想预打印——在Python中,最简单的方法是什么?我知道prettyprint需要一个"object",我认为它可以是一个文件,但是我不知道如何传入一个文件——仅仅使用文件名是行不通的。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> 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()

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


pygmentize+python json.tool=pretty print with syntax highlighting

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

我将python json.tool与pygmentize结合在一起

1
2
3
4
5
6
7
8
9
echo '{"foo":"bar
<div class="suo-content">[collapse title=""]<ul><li>在您的示例中,<wyn>-g</wyn>实际上不起作用;)因为输入来自stdin,所以pygmentize无法做出正确的猜测。您需要明确指定lexer:<wyn>echo '
{"foo":"bar"}' | python -m json.tool | pygmentize -l json</wyn>。</li><li>@否认它在2015年创建这个示例图像时曾起作用。现在我的系统好像也不管用。</li></ul>[/collapse]</div><hr><P>您可以使用内置模块pprint。</P><P>如何使用JSON数据读取文件并将其打印出来。</P>[cc lang="python"]import json
import pprint

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

pprint.pprint(json_data)


Use this function and don't sweat having to remember if your JSON is a str or dict again - just look at the pretty print:

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)

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

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

然后用以下方法之一使用别名:

1
2
cat myfile.json | jsonpp
jsonpp < myfile.json


下面是一个简单的例子,在python中以一种很好的方式将json打印到控制台,而不需要将json作为本地文件保存在您的计算机上:

1
2
3
4
5
6
7
8
9
10
import pprint
import json
from urllib.request import urlopen # (Only used to get this example)

# Getting a JSON example for this example
r = urlopen("https://mdn.github.io/fetch-examples/fetch-json/products.json")
text = r.read()

# To print it
pprint.pprint(json.loads(text))


使用pprint:https://docs.python.org/3.6/library/pprint.html

1
2
import pprint
pprint.print(json)

比较print()pprint.pprint()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
print(json)
{'feed': {'title': 'W3Schools Home Page', 'title_detail': {'type': 'text/plain', 'language': None, 'base': '', 'value': 'W3Schools Home Page'}, 'links': [{'rel': 'alternate', 'type': 'text/html', 'href': 'https://www.w3schools.com'}], 'link': 'https://www.w3schools.com', 'subtitle': 'Free web building tutorials', 'subtitle_detail': {'type': 'text/html', 'language': None, 'base': '', 'value': 'Free web building tutorials'}}, 'entries': [], 'bozo': 0, 'encoding': 'utf-8', 'version': 'rss20', 'namespaces': {}}

pprint.pprint(json)
{'bozo': 0,
 'encoding': 'utf-8',
 'entries': [],
 'feed': {'link': 'https://www.w3schools.com',
          'links': [{'href': 'https://www.w3schools.com',
                     'rel': 'alternate',
                     'type': 'text/html'}],
          'subtitle': 'Free web building tutorials',
          'subtitle_detail': {'base': '',
                              'language': None,
                              'type': 'text/html',
                              'value': 'Free web building tutorials'},
          'title': 'W3Schools Home Page',
          'title_detail': {'base': '',
                           'language': None,
                           'type': 'text/plain',
                           'value': 'W3Schools Home Page'}},
 'namespaces': {},
 'version': 'rss20'}