我该如何在Linux shell中将一行JSON转换为格式漂亮的打印方式?

41 浏览
0 Comments

我该如何在Linux shell中将一行JSON转换为格式漂亮的打印方式?

有没有(Unix) shell脚本可以将JSON格式化为人类可读的形式?

基本上,我想将它转换为以下形式:

{ "foo": "lorem", "bar": "ipsum" }

... 变成类似以下的:

{
    "foo": "lorem",
    "bar": "ipsum"
}

admin 更改状态以发布 2023年5月23日
0
0 Comments

您可以使用: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"

0
0 Comments

使用 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

0