是否有(Unix)shell脚本将JSON格式化为可读格式?

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

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

…变成这样:

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

当前回答

你只需要使用jq如果未安装jq,则需要先安装jq。

sudo apt-get update
sudo apt-get install jq

安装jq后,只需使用jq

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

输出看起来像

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

其他回答

有TidyJSON。

它是C#,所以也许你可以让它用Mono编译,并使用*nix。但没有保证,抱歉。

如果使用npm和Node.js,则可以执行npm install-g json,然后通过json发送命令。执行json-h以获取所有选项。它还可以拉出特定字段,并用-i为输出着色。

curl -s http://search.twitter.com/search.json?q=node.js | json

在一行中使用Ruby:

echo '{"test":1,"test2":2}' | ruby -e "require 'json'; puts JSON.pretty_generate(JSON.parse(STDIN.read))"

您可以为此设置别名:

alias to_j="ruby -e \"require 'json';puts JSON.pretty_generate(JSON.parse(STDIN.read))\""

然后你可以更方便地使用它

echo '{"test":1,"test2":2}' | to_j

{
  "test": 1,
  "test2": 2
}

如果你想用颜色显示JSON,你可以安装awesome_print,

gem install awesome_print

then

alias to_j="ruby -e \"require 'json';require 'awesome_print';ap JSON.parse(STDIN.read)\""

试试看!

echo '{"test":1,"test2":2, "arr":["aa","bb","cc"] }' | to_j

如果您不介意使用第三方工具,您可以直接转到jsonprettyprint.org。这适用于无法在机器上安装软件包的情况。

curl -XPOST https://jsonprettyprint.org/api -d '{"user" : 1}'

工具ydump是一个JSON漂亮的打印机:

$ ydump my_data.json
{
  "foo": "lorem",
  "bar": "ipsum"
}

或者可以通过管道输入JSON:

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

这可能是除了使用jq工具之外最短的解决方案。

该工具是OCaml的yojson库的一部分,并在此处进行了说明。

在Debian及其衍生产品上,libyojson-ocml-dev包包含此工具。或者,可以通过OPAM安装yojson。