揮発性のメモ2

http://d.hatena.ne.jp/iww/

bashでjqを使ってJSONの配列をループさせる

jsonの配列をシェルスクリプトとjqでループさせて取得する

[
  { "ip" : "192.168.10.105", "name" : "玄関" },
  { "ip" : "192.168.10.102", "name" : "居間" },
  { "ip" : "192.168.10.101", "name" : "トイレ" },
  { "ip" : "192.168.10.100", "name" : "寝室" }
]

こんな感じのJSONの配列をループして処理する

cat hoge.json |jq -c .[] |while read JSON; do
  IP=$(echo $JSON |jq -r .ip)
  NAME=$(echo $JSON |jq -r .name)

  echo $IP$NAME です
done
$ ./hoge.sh
192.168.10.105 は 玄関 です
192.168.10.102 は 居間 です
192.168.10.101 は トイレ です
192.168.10.100 は 寝室 です




jq -c .[] で配列をバラして一行ずつ出力できる

$ jq -c .[] < hoge.json
{"ip":"192.168.10.105","name":"玄関"}
{"ip":"192.168.10.102","name":"居間"}
{"ip":"192.168.10.101","name":"トイレ"}
{"ip":"192.168.10.100","name":"寝室"}

-c を付けないとこうなるやつ

$ jq .[] < hoge.json
{
  "ip": "192.168.10.105",
  "name": "玄関"
}
{
  "ip": "192.168.10.102",
  "name": "居間"
}
{
  "ip": "192.168.10.101",
  "name": "トイレ"
}
{
  "ip": "192.168.10.100",
  "name": "寝室"
}


1行ずつ while read で回して $JSONに取り込み、あとは適当に さらに jqで 各変数を取り出して終わり