在(Unix)shell脚本中打印JSON?

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

基本上,我希望它改变以下内容:

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

...变成这样的东西:

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

用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"}'


你可以使用: jq

它使用起来非常简单,而且效果非常好! 它可以处理非常大的JSON结构,包括流。 你可以在这里找到他们的教程。

这里是一个例子:

$ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

换句话说:

$ echo '{ "foo": "lorem", "bar": "ipsum" }' | jq .
{
  "bar": "ipsum",
  "foo": "lorem"
}

我使用[JSON.stringify ] 1的“space”参数在JavaScript中漂亮地打印JSON。

例子:

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 't');

从具有nodejs的Unix命令行,在命令行上指定json:

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 't'));" 
  '{"foo":"lorem","bar":"ipsum"}'

返回:

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

从具有Node.js的Unix命令行指定包含JSON的文件名,并使用四个空格缩进:

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') 
      .readFileSync(process.argv[1])), null, 4));"  filename.json

使用管道:

echo '{"foo": "lorem", "bar": "ipsum"}' | node -e 
"
 s=process.openStdin();
 d=[];
 s.on('data',function(c){
   d.push(c);
 });
 s.on('end',function(){
   console.log(JSON.stringify(JSON.parse(d.join('')),null,2));
 });
"
链接地址: http://www.djcxy.com/p/125.html

上一篇: print JSON in a (Unix) shell script?

下一篇: Proper MIME media type for PDF files