python JSON漂亮的打印多行

ca1c2owp  于 2023-06-04  发布在  Python
关注(0)|答案(4)|浏览(190)

哪个命令行工具可以漂亮地打印一个包含多行的文件(每行都用JSON编码)
输入文件:msgs.json:

[1,{"6":7,"4":5}]
[2,{"6":7,"4":5}]

json.tool似乎只能处理单个JSON消息
编辑:修改json.tool以支持在答案below中的多个JSON消息
示例用法:

python myjson.py msgs.json
                    [
                        1,
                        {
                            "4": 5,
                            "6": 7
                        }
                    ]
                    [
                        2,
                        {
                            "4": 5,
                            "6": 7
                        }
                    ]
db2dz4w8

db2dz4w81#

在python中,可以这样做:

import json

with open('msgs.json', 'r') as json_file:
    for row in json_file:
        data = json.loads(row)
        print(json.dumps(data, sort_keys=True, indent=2, separators=(',', ': ')))
u7up0aaq

u7up0aaq2#

jq可以做到这一点,还有更多,这是我使用的,但可能对你来说有点过头了。你可以找到here
cat yourfile.json | jq '.'应该可以

6ie5vjzr

6ie5vjzr3#

myjson.py - 一个修改过的JSON工具,支持多个JSON消息:

#!/usr/bin/python

"""myjson.py: Command-line tool to validate and pretty-print JSON

Usage::
     1)     $ echo '{"json":"obj"}' | python myjson.py
        {
            "json": "obj"
        }
     2)     $ echo '{ 1.2:3.4}' | python myjson.py
        Expecting property name enclosed in double quotes: line 1 column 2 (char 2)

     3) printing a file with multiple lines where each line is a JSON message:
            e.g. msgs.json:
                    [1,,{"6":7,"4":5}]
                    [2,{"6":7,"4":5}]
            python myjson.py msgs.json
                    [
                        1,
                        {
                            "4": 5,
                            "6": 7
                        }
                    ]
                    [
                        2,
                        {
                            "4": 5,
                            "6": 7
                        }
                    ]
"""
import sys
import json
def main():
        data = []
        if len(sys.argv) == 1:
            infile = sys.stdin
            outfile = sys.stdout
        elif len(sys.argv) == 2:
            infile = open(sys.argv[1], 'rb')
            outfile = sys.stdout
        elif len(sys.argv) == 3:
            infile = open(sys.argv[1], 'rb')
            outfile = open(sys.argv[2], 'wb')
        else:
            raise SystemExit(sys.argv[0] + " [infile [outfile]]")
        with infile:
            try:
                  for line in infile:
                            data.append(json.loads(line))
            except ValueError, e:
                raise SystemExit(e)
        with outfile:
            for d in data:
                    json.dump(d, outfile, sort_keys=True,
                             indent=4, separators=(',', ': '))
                    outfile.write('\n')
if __name__ == '__main__':
        main()
v9tzhpje

v9tzhpje4#

一个命令行实用程序,可以漂亮地打印一个行分隔的JSON文件(又名NDJSON,LDJSON,JSON Lines,JSON-L,JSONL),任何使用现代版本Python的人都可以使用:

python -m json.tool msgs.json --json-lines

jq比漂亮的打印功能更强大、更灵活,因此值得使用installing,并像这样使用它:

cat msgs.json | jq .

相关问题