JSON の結果をテーブル形式に変換して出力する

jq と column コマンドを使って、JSON 形式のファイルをテーブル形式で表示する。

$ cat << EOL > list.json
[
  {
    "id": "aaa",
    "name": "Aさん",
    "age": 25,
    "gender": "Male"
  },
  {
    "id": "bbb",
    "name": "BBBBB太郎",
    "age": 19,
    "gender": "Female"
  }
]
EOL

こんな感じのファイルがある前提。

$ jq -r '(.[0] | keys_unsorted | @tsv), (.[] | map(.) | @tsv)' list.json | column -t

配列の1つ目のデータを使って、キーを抽出してヘッダを作る。それを @tsv でタブ区切りにする。

さらにデータを @tsv でタブ区切りにする。

単純にココまででタブ区切りのまま表示しても良いが、それをパイプして column -t に渡してやれば、以下のように列のアラインメントが揃う。

id   name       age  gender
aaa  Aさん      25   Male
bbb  BBBBB太郎  19   Female

# タブ区切りのみだと以下のようになる
id      name    age     gender
aaa     Aさん   25      Male
bbb     BBBBB太郎       19      Female

こんな感じ。