How can I pretty-print a JSON file from the command line?
我有一个包含json元素序列的文件:
1 2 3 4 | { element0:"lorem", value0:"ipsum" } { element1:"lorem", value0:"ipsum" } ... { elementN:"lorem", value0:"ipsum" } |
是否有一个shell脚本来格式化json以以可读的形式显示文件内容?
我看过这篇文章,我认为这是一个很好的起点!
我的想法是迭代文件中的行,然后:
1 | while read row; do echo ${row} | python -mjson.tool; done <"file_name" |
有人有其他想法吗?
将文件中的结果通过管道传输到python json工具2.6中。
1 | cat 'file_name' | python -m json.tool |
您可以使用python json工具(需要python 2.6+)。
例如:
1 | echo '{"element0" :"lorem","element1" :"ipsum" }' | python -m json.tool |
这将给你:
1 2 3 4 | { "element0":"lorem", "element1":"ipsum" } |
JQ-一个轻量级和灵活的命令行JSON处理器
当我花了比必须发现的时间更长的时间时,我觉得这是值得一试的。我在寻找一种简单的方法来漂亮地打印
来自JQ网站(https://stedolan.github.io/jq/):
jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.
它默认提供彩色输出,您只需通过管道连接到
1 | cat file | jq . |
例子:
"原始"JSON输出与连接到JQ的相同输出
使用pygmentize+python json.tool的彩色输出
Pygmentize是一个杀手工具。看到这个了。我将python json.tool与pygmentize结合在一起
1 | echo '{"foo":"bar"}' | python -m json.tool | pygmentize -g |
有关其他类似工具和安装说明,请参阅上面链接的答案。
以下是现场演示:
有很多。我个人在我的
1 2 3 | pjson () { ~/bin/pjson.py | less -X } |
其中
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/env python import json import sys try: input_str = sys.stdin.read() print json.dumps(json.loads(input_str), sort_keys = True, indent = 2) except ValueError,e: print"Couldn't decode %s Error : %s"%(input_str, str(e)) |
允许我在命令行中将其用作管道(类似于
哦,自定义代码是一种责任,所以有JQ,在我看来,它像黄金标准。它是用C语言编写的(因此是可移植的,没有依赖性,如python或node),它不仅可以很好地打印,而且速度很快。
您可以使用
1 2 3 4 5 6 | # Redhat based systems(Centos) yum install -y epel-release yum install -y jq # Debian based systems apt install -y jq |
然后,您将能够将文本流传输到JQ工具。
1 | echo '{"test":"value","test2":"value2"}' | jq |
希望这个答案会有所帮助。
在Mac OS中,用命令安装
1 | $ brew install jq |
你可以得到与
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ curl -X GET http://localhost:8080/api/v1/appointments/1 | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 117 0 117 0 0 8404 0 --:--:-- --:--:-- --:--:-- 9000 { "craeted_at":"10:24:38", "appointment_date":"2019-02-08", "name_of_doctor":"Monika", "status": true, "price": 12.5, "id": 1 } |
Shawn的解决方案,但对于python 3:
1 | echo '{"foo":"bar"}' | python3 -m json.tool |