シェルスクリプトのJSONパースには
jqを活用できます。
データ構造に合わせてjq '.items[0].id'
といったフィールドアクセサを書くことで目的のデータを取得します。
JSONが配列を含んでいる場合にも、以下のような制御構造でシェル向けのループ処理が可能です。
export JSON='{ "items": [{ "id": 1 }, { "id": 2 }]}'
for item in $(echo $JSON | jq -c '.items[]'); do
echo $item | jq '.id'
done
外側のjq -c '.items[]'
は、Array Iteratorの機能により以下のような出力を行います。
{"id":1}
{"id":2}
bashのfor
ループで一行ずつ取り出すことで再帰的に処理できます。
この出力は有効なJSONですから、ループ内でもう一度jq
に入力することで任意のフィールドを取り出せます。
ポイントは、外側のjq
に-c
オプションを指定して一行出力することです。
デフォルトでは表示向けの整形により、{"id":1}
が3行で出力されます。この場合、各行は有効なJSONではないため、ループ内でエラーになります。
⁋ 2022/01/14↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro