How to prettyprint a JSON file?
我有一个JSON文件,它是一个混乱的文件,我想预打印——在Python中,最简单的方法是什么?我知道prettyprint需要一个"object",我认为它可以是一个文件,但是我不知道如何传入一个文件——仅仅使用文件名是行不通的。
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 ] } ] |
要解析文件,请使用
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
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) |
比较
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'} |