jq の入っていない環境で、JSON をフォーマットする方法

JSON をフォーマットしたいけど、jq が入っていない!ということがよくあります。
そういう時は、RubyPHP を使いましょう!

Ruby の場合

ruby -rjson -e 'puts JSON.pretty_generate(JSON.parse(STDIN.read))'

↓ こんな風に表示されます!

[qiita@example ~]$ echo '{"key": {"format": ["json", "XML"]}}' \
    | ruby -rjson -e 'puts JSON.pretty_generate(JSON.parse(STDIN.read))'
{
  "key": {
    "format": [
      "json",
      "XML"
    ]
  }
}

また、JSON.parse(STDIN.read)["key"] とすることで、特定の項目だけ表示することもできます。

[qiita@example ~]$ echo '{"key": {"format": ["json", "XML"]}}' \
    | ruby -rjson -e 'puts JSON.pretty_generate(JSON.parse(STDIN.read)["key"])'
{
  "format": [
    "json",
    "XML"
  ]
}

PHP の場合

php -r 'echo json_encode(json_decode(stream_get_contents(STDIN)), JSON_PRETTY_PRINT);'

↓ こんな風に表示されます!

[qiita@example ~]$ echo '{"key": {"format": ["json", "XML"]}}' \
    | php -r 'echo json_encode(json_decode(stream_get_contents(STDIN)), JSON_PRETTY_PRINT);'
{
    "key": {
        "format": [
            "json",
            "XML"
        ]
    }
}

また、json_decode(stream_get_contents(STDIN))->key とすることで、特定の項目だけ表示することもできます。

[qiita@example ~]$ echo '{"key": {"format": ["json", "XML"]}}' \
    | php -r 'echo json_encode(json_decode(stream_get_contents(STDIN))->key, JSON_PRETTY_PRINT);'
{
    "format": [
        "json",
        "XML"
    ]
}