我有一个JSON文件,我想对其进行漂亮打印-在python中执行此操作的最简单方法是什么?我知道PrettyPrint带有一个“对象”,我认为它可以是一个文件,但是我不知道如何传递文件-仅使用文件名是行不通的。
<your_file.js python -mjson.tool@ed的链接中那样?
                我有一个JSON文件,我想对其进行漂亮打印-在python中执行此操作的最简单方法是什么?我知道PrettyPrint带有一个“对象”,我认为它可以是一个文件,但是我不知道如何传递文件-仅使用文件名是行不通的。
<your_file.js python -mjson.tool@ed的链接中那样?
                Answers:
该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)
              print json.dumps(your_json_string, indent=4)
                    print(json.dumps(json.loads(your_json_string), indent=2))否则它只是向我显示了一个转义的字符串
                    您可以在命令行上执行此操作:
python3 -m json.tool some.json
(正如问题注释中已经提到的,感谢@Kai Petzke的python3建议)。
实际上,就命令行上的json处理而言,python不是我最喜欢的工具。简单的漂亮打印是可以的,但是如果您要操作json,它可能会变得过于复杂。您很快就需要编写一个单独的脚本文件,最终可能得到其键为u“ some-key”(python unicode)的地图,这会使选择字段更加困难,并且实际上并没有朝着漂亮的方向发展。 -印刷。
您也可以使用jq:
jq . some.json
并获得颜色作为奖励(并且更容易扩展)。
附录:关于使用jq一方面处理大型JSON文件,另一方面使用非常大的jq程序的注释有些混乱。对于漂亮地打印由单个大型JSON实体组成的文件,实际的限制是RAM。对于漂亮地打印由单个真实数据数组组成的2GB文件,漂亮打印所需的“最大驻留集大小”为5GB(无论使用jq 1.5还是1.6)。还要注意,jq可以在python之后使用pip install jq。
jq '' < some.json
                    python3 -m json.tool <IN >OUT,因为这会保持JSON dict中字段的原始顺序。python解释器版本2按字母升序对字段进行排序,而这并不是您想要的。
                    您可以使用内置的modul pprint(https://docs.python.org/3.6/library/pprint.html)。
如何读取带有json数据的文件并打印出来。
import json
import pprint
json_data = None
with open('filename.txt', 'r') as f:
    data = f.read()
    json_data = json.loads(data)
pprint.pprint(json_data)
              Pygmentize是杀手级工具。看到这个。
我结合python json.tool与pygmentize
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
有关pygmentize安装说明,请参见上面的链接。
下图是一个演示:
-g它实际上并不起作用;)由于输入来自stdin,因此pygmentize无法做出很好的猜测。您需要明确指定词法分析器:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
                    使用此功能,不出汗不必记住,如果你的JSON是一种str或dict再次-这个漂亮的打印只要看看:
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)
              我曾经写过一个prettyjson()函数来产生漂亮的输出。您可以从此仓库中获取实现。
此功能的主要功能是尝试将dict和list项目保持在一行中,直到maxlinelength达到确定的水平为止。这样会产生更少的JSON行,输出看起来更紧凑且更易于阅读。
您可以产生这种输出,例如:
{
  "grid": {"port": "COM5"},
  "policy": {
    "movingaverage": 5,
    "hysteresis": 5,
    "fan1": {
      "name": "CPU",
      "signal": "cpu",
      "mode": "auto",
      "speed": 100,
      "curve": [[0, 75], [50, 75], [75, 100]]
    }
}
UPD 19年12月:我将代码放入单独的存储库中,更正了一些错误,并进行了其他一些调整。
使用pprint:https ://docs.python.org/3.6/library/pprint.html
import pprint
pprint.pprint(json)
print() 相比 pprint.pprint()
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'}
              pprint不会产生有效的JSON文档。
                    这是一个简单的示例,可以在Python中以一种不错的方式将JSON打印到控制台,而无需将JSON作为本地文件存储在您的计算机上:
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))
              def saveJson(date,fileToSave):
    with open(fileToSave, 'w+') as fileToSave:
        json.dump(date, fileToSave, ensure_ascii=True, indent=4, sort_keys=True)
它可以显示或保存到文件中。
您可以尝试pprintjson。
$ pip3 install pprintjson
使用pprintjson CLI从文件漂亮地打印JSON。
$ pprintjson "./path/to/file.json"
使用pprintjson CLI从标准输入漂亮地打印JSON。
$ echo '{ "a": 1, "b": "string", "c": true }' | pprintjson
使用pprintjson CLI从字符串漂亮地打印JSON。
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }'
从缩进为1的字符串漂亮地打印JSON。
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -i 1
从字符串漂亮地打印JSON并将输出保存到文件output.json。
$ pprintjson -c '{ "a": 1, "b": "string", "c": true }' -o ./output.json
json.loads()并漂亮地打印生成的字典。或直接跳至的Python 文档的“ 漂亮打印”部分。json