MAGAZINE
ルーターマガジン
データ/フォーマット
jqコマンドでCSVを出力する方法
2024.05.30
jqは、JSONデータを効率的に操作するための軽量で柔軟なコマンドラインツールです。この記事では、jqコマンドでCSVを出力する方法についてご紹介します。
まず、以下のようなJSONを用意します。
▼sample.json
[
{
"name": "Tanaka",
"age": "28",
"city": "Tokyo"
},
{
"name": "Suzuki",
"age": "32",
"city": "Osaka"
}
]
最終的には以下のようにCSVにすることが出来ます。
jq -r '.[]|[.name,.age,.city]|@csv' sample.json
"Tanaka","28","Tokyo"
"Suzuki","32","Osaka"
以降で、各ステップを解説します。
ステップ1 .[]
で配列の中身を全て取り出す
.[]
は、JSON配列の各要素の値を取り出します。
jq '.[]' sample.json
{
"name": "Tanaka",
"age": "28",
"city": "Tokyo"
}
{
"name": "Suzuki",
"age": "32",
"city": "Osaka"
}
ステップ2 [.name, .age, .city]
でvalueのみを取り出す
[.name, .age, .city]
をパイプで繋いで、各オブジェクトのname、age、cityの値を配列として取り出します。
jq '.[]|[.name,.age,.city]' sample.json
[
"Tanaka",
"28",
"Tokyo"
]
[
"Suzuki",
"32",
"Osaka"
]
ステップ3 @csv
で配列からCSVへ
@csv
は、 配列をCSV形式の文字列に変換します。
jq '.[]|[.name,.age,.city]|@csv' sample.json
"\"Tanaka\",\"28\",\"Tokyo\""
"\"Suzuki\",\"32\",\"Osaka\""
JSONの値の文字列としてCSVに変換されるので、行ごとにダブルクォートで囲われてCSVのフィールドのダブルクォートがエスケープされている状態です。
ステップ4 -r
オプションで余分なダブルクォーテーションを消す
-r
オプションを使用することで、前後のダブルクォートやJSON文字列のエスケープを外して完成です。
jq -r '.[]|[.name,.age,.city]|@csv' sample.json
"Tanaka","28","Tokyo"
"Suzuki","32","Osaka"
また、フィールド内のダブルクォートは、ダブルクォートでエスケープしてくれます。
echo '[{"name": "Tana\"ka","age": "28","city": "Tokyo"}]'|jq -r '.[] | [.name, .age, .city] | @csv'
"Tana""ka","28","Tokyo"
全てのフィールドがダブルクォートで囲われているので、フィールド内に改行やカンマがあっても安心ですね。
CONTACT
お問い合わせ・ご依頼はこちらから