[jq] CSV ファイルをパースして JSON に変換する

作成日: 2022年03月04日

jq の組み込み関数である split を使用すると、入力された内容をカンマ区切りでパースすることができます。この機能を使って JSON に変換することができます。下記に具体的なコマンドの例となります。

まず下記の内容の dummy.csv というファイルを作成します。

1,"Tom",15
2,"Bob",30
3,"Alice",20

下記のコマンドを実行します。

cat dummy.csv | tr -d '"' | jq -R 'split(",") | {"id": .[0] | tonumber, "name": .[1], "age": .[2] | tonumber}'

説明

  • 出力される JSON でダブルクォーテーションが二重になってしまうので tr コマンドでダブルクォーテーションを削除しています。
  • jq の -R オプションで入力を JSON とみなさないようにしています。
  • split(",") で入力を CSV ファイルとしてパースします。
  • CSV ファイルで数値型の値は tonumber を使って数値型になるように変換しています。

実行結果

{
  "id": 1,
  "name": "Tom",
  "age": 15
}
{
  "id": 2,
  "name": "Bob",
  "age": 30
}
{
  "id": 3,
  "name": "Alice",
  "age": 20
}
jq