JSONデータをCSV出力する方法

入力データ。

$ jq . ichibanya.json
[
  {
    "id": "5001",
    "name": "ソーセージカレー"
  },
  {
    "id": "5002",
    "name": "チーズインハンバーグカレー"
  },
  {
    "id": "5003",
    "name": "ビーフカツカレー"
  },
  {
    "id": "6001",
    "name": "ほうれん草カレー"
  },
  {
    "id": "6002",
    "name": "トマトアスパラカレー"
  },
  {
    "id": "9001",
    "name": "マンゴーミルクラッシー"
  }
]

jq コマンドでCSV出力。

$ jq -r '.[] | [.id, .name] | @csv' ichibanya.json
"5001","ソーセージカレー"
"5002","チーズインハンバーグカレー"
"5003","ビーフカツカレー"
"6001","ほうれん草カレー"
"6002","トマトアスパラカレー"
"9001","マンゴーミルクラッシー"

csvkit の in2csvコマンドでCSV出力。

$ in2csv -f json ichibanya.json
id,name
5001,ソーセージカレー
5002,チーズインハンバーグカレー
5003,ビーフカツカレー
6001,ほうれん草カレー
6002,トマトアスパラカレー
9001,マンゴーミルクラッシー

 

配列を含む入力データ。

$ jq . cars.json
[
  {
    "manufacturer": "Porsche",
    "model": [
      "911",
      "Cayenne"
    ]
  },
  {
    "manufacturer": "Nissan",
    "model": [
      "GT-R",
      "Z"
    ]
  },
  {
    "manufacturer": "Toyota",
    "model": [
      "Prius"
    ]
  }
]

jq コマンド。{} によってオブジェクトf1 とオブジェクトf2 を作成し、冗長化してCSVに出力。

$ jq -r '.[] | {f1: .manufacturer, f2: .model[]} | [.f1, .f2] | @csv' cars.json
"Porsche","911"
"Porsche","Cayenne"
"Nissan","GT-R"
"Nissan","Z"
"Toyota","Prius"