0
jqで一般的なJSONフォーマットをCSVへ変換するエイリアス
2024-07-18

手元でさっとデータ出しや調査をしたい場合、とりあえずスプレッドシートに落としていろいろ見てみることが多く、その場合CSVをアップロードすることになる

手元でスクリプト書いたりする場合はなんだかんだでJSONに出力することが多いのでJSONからCSVへの変換をよく実施する

サンプル

  • sample.json
[
    {"name": "Alice", "age": 30, "city": "New York"},
    {"name": "Bob", "age": 25, "city": "Los Angeles"},
    {"name": "Charlie", "age": 35, "city": "Chicago"}
]

jqコマンド

こんな感じ

$ cat sample.json | jq -r '(.[0]|to_entries|map(.key)),(.[]|[.[]])|@csv'
"name","age","city"
"Alice",30,"New York"
"Bob",25,"Los Angeles"
"Charlie",35,"Chicago"

ヘッダ部分

JSONのキー部分の値を取得する

$ cat sample.json| jq -r '(.[0]|to_entries|map(.key))'
[
  "name",
  "age",
  "city"
]

順を追ってみる

$ cat sample.json| jq -r '.[0]'
{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}
$ cat sample.json| jq -r '.[0]|to_entries'
[
  {
    "key": "name",
    "value": "Alice"
  },
  {
    "key": "age",
    "value": 30
  },
  {
    "key": "city",
    "value": "New York"
  }
]
$ cat sample.json| jq -r '.[0]|to_entries|map(.key)'
[
  "name",
  "age",
  "city"
]

2行目以降のデータ部分

各JSONオブジェクトの値を抽出

cat sample.json| jq -r '(.[]|[.[]])'
[
  "Alice",
  30,
  "New York"
]
[
  "Bob",
  25,
  "Los Angeles"
]
[
  "Charlie",
  35,
  "Chicago"
]

行ごとにしてから各行の値をリストにしている

aliasに

alias jtoc="jq -r '(.[0]|to_entries|map(.key)),(.[]|[.[]])|@csv'"

結果

$ cat sample.json | jtoc
"name","age","city"
"Alice",30,"New York"
"Bob",25,"Los Angeles"
"Charlie",35,"Chicago"

よく使うかなということでアイリエスに追加しておいた

手元でさっとJSONデータをCSVに変換できる

たとえば、スプレッドシートにデータをインポートしたり、CSV形式で保存して、他のツールと連携したりする場合に非常に便利

0

Profile

swfz
swfz
日々学んだことを残していく
Today I Learned
コード片置き場

Account

RSS

Powered by Pixela
© 2024. swfz