我该如何在Linux shell中将一行JSON转换为格式漂亮的打印方式?
我该如何在Linux shell中将一行JSON转换为格式漂亮的打印方式?
有没有(Unix) shell脚本可以将JSON格式化为人类可读的形式?
基本上,我想将它转换为以下形式:
{ "foo": "lorem", "bar": "ipsum" }
... 变成类似以下的:
{ "foo": "lorem", "bar": "ipsum" }
admin 更改状态以发布 2023年5月23日
您可以使用:jq
它非常简单易用且效果很好!它可以处理非常大的JSON结构,包括流数据。您可以在此处找到它们的教程:here。
使用示例:
$ jq --color-output . file1.json file1.json | less -R $ command_with_json_output | jq . $ jq # stdin/"interactive" mode, just enter some JSON $ jq <<< '{ "foo": "lorem", "bar": "ipsum" }' { "bar": "ipsum", "foo": "lorem" }
或使用带有身份过滤器的jq
:
$ jq '.foo' <<< '{ "foo": "lorem", "bar": "ipsum" }' "lorem"
使用 Python 2.6+,您可以执行以下操作:
echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
或者,如果 JSON 存在于文件中,则可以执行:
python -m json.tool my_json.json
如果 JSON 来自于诸如 API 之类的网络源,则可以使用:
curl http://my_url/ | python -m json.tool
为了方便,在所有这些情况下,您都可以创建一个别名:
alias prettyjson='python -m json.tool'
为了更加方便地准备好它,需要进行一些更多的输入:
prettyjson_s() { echo "$1" | python -m json.tool } prettyjson_f() { python -m json.tool "$1" } prettyjson_w() { curl "$1" | python -m json.tool }
以上所有情况都可以使用。您可以将其放入.bashrc
,这样它就可以在 shell 中的每个时刻使用。像这样调用它:prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
。
请注意,如下评论中 @pnd 所指出的那样,Python 3.5+ 中默认情况下不再对 JSON 对象进行排序。 要进行排序,请在末尾添加--sort-keys
标志。 即:... | python -m json.tool --sort-keys
。