如何用Python打印JSON文件?


当前回答

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

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

其他回答

使用json.dump()或json.dumps()的indent关键字参数指定要使用的缩进量:

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

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

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

使用json标准库模块读取数据后,使用pprint标准库模块显示解析的数据。例子:

import json
import pprint

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

pprint.pprint(json_data)

输出将如下所示:

{'address': {'city': 'New York',
             'postalCode': '10021-3100',
             'state': 'NY',
             'streetAddress': '21 2nd Street'},
 'age': 27,
 'children': [],
 'firstName': 'John',
 'isAlive': True,
 'lastName': 'Smith'}

请注意,此输出不是有效的JSON;虽然它以良好的格式显示Python数据结构的内容,但它使用Python语法来实现。特别是,字符串(通常)用单引号括起来,而JSON需要双引号。要将数据重写为JSON文件,请使用pprint.pdf格式:

pretty_print_json = pprint.pformat(json_data).replace("'", '"')

with open('file_name.json', 'w') as f:
    f.write(pretty_print_json)

这远不是完美的,但它确实起到了作用。

data = data.replace(',"',',\n"')

你可以改进它,添加缩进等等,但是如果你只是想读一个更干净的json,这就是方法。

我认为最好先解析json,以避免错误:

def format_response(response):
    try:
        parsed = json.loads(response.text)
    except JSONDecodeError:
        return response.text
    return json.dumps(parsed, ensure_ascii=True, indent=4)

我有一个类似的要求来转储json文件的内容以进行日志记录,这是一种快速而简单的方法:

print(json.dumps(json.load(open(os.path.join('<myPath>', '<myjson>'), "r")), indent = 4 ))

如果您经常使用它,请将其放在函数中:

def pp_json_file(path, file):
    print(json.dumps(json.load(open(os.path.join(path, file), "r")), indent = 4))