在(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