はじめに
JSON形式のファイルから値を取り出すjqコマンドは以下にて紹介しています。
その応用として複数の項目を取り出す際のjqコマンドの使い方について解説します。
環境情報
- Debian GNU/Linux 9 (stretch)
- jq-1.5
jqコマンドの基本的な使い方
例えば以下のようなJSONファイルがあった時に
{"Items":[{"Item":"itemName":"..","itemPrice":"10516","genreId":"201998","pointRateStartTime":"",...
以下のようにすればそれぞれの値が抜き出せます。
# cat hoge.json | jq .Items[0].Item.genreId "201998"
# cat hoge.json | jq .Items[0].Item.itemPrice "10516"
jqコマンドの引数はjidコマンドで確認できます。
複数の値を抜き出す
値をカンマ区切りで記載すれば値が複数行となる形で表示されます。
# cat hoge.json | jq .Items[0].Item.genreId,.Items[0].Item.itemPrice "201998" "10516"
そして引数を[]
で囲めば[ , ]形式で表示され
# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]" [ "201998", "10516" ]
末尾に|@csv
や@tsv
とすれば区切り文字を入れて一行に表示可能です。
# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@csv" "\"201998\",\"10516\""
# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@tsv" "201998\t10516"
ダブルクォーテーションとタブは以下で外すことが可能です。\t
の置換をカンマにしていますがここは任意の値を指定できます。
# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@tsv" | sed -e 's/\"//g' | sed -e 's/\\t/,/g' 201998,10516
終わりに
値をカンマで区切れば改行が入るものの複数の値が取得できる点は覚えておくと役立ちます。また、@csv
や@html
といった出力形式の指定も便利です。
詳細は以下の公式マニュアルを参照ください。
以上、ご参考になれば幸いです。