一尘不染

如何在 shell 脚本中漂亮地打印 JSON?

shell

是否有(Unix)shell 脚本以人类可读的形式格式化 JSON?

基本上,我希望它转换以下内容:

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

…变成这样的东西:

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

阅读 297

收藏
2022-01-16

共1个答案

一尘不染

使用 Python 2.6+,您可以:

echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool

或者,如果 JSON 在文件中,您可以执行以下操作:

python -m json.tool my_json.json

如果 JSON 来自 Internet 源(例如 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

2022-01-16