やりたいこと
- user01の.modeをtrueに変えたい
使うメソッド
- map()
- ListをMapへ変換
- select()
- 特定の要素のみを指定
- !=
- 要素を置換する
- //
- a // b で a ? a : b と評価される演算子
- .
サンプル
[
{
"name": "user01",
"majour_version": 1,
"mode": false
},
{
"name": "user02",
"majour_version": 2,
"mode": false
},
{
"name": "user03",
"majour_version": 2,
"mode": false
}
]
第一形態
とくに変わらないけれど、登場人物を全部当てはめる
cat test.json | jq '. |= map((select(0)) // .)'
[
{
"name": "user01",
"majour_version": 1,
"mode": true
},
{
"name": "user02",
"majour_version": 2,
"mode": false
},
{
"name": "user03",
"majour_version": 2,
"mode": false
}
]
第二形態
登場する.modeをすべてtrueに変える
cat test.json | jq '. |= map((select(1).mode |= true) // .)'
[
{
"name": "user01",
"majour_version": 1,
"mode": true
},
{
"name": "user02",
"majour_version": 2,
"mode": true
},
{
"name": "user03",
"majour_version": 2,
"mode": true
}
]
最終形態
狙ったuser01のmodeのみをtrueにすることができた
cat test.json | jq '. |= map((select(.name == "user01").mode |= true) // .)'
[
{
"name": "user01",
"majour_version": 1,
"mode": true
},
{
"name": "user02",
"majour_version": 2,
"mode": false
},
{
"name": "user03",
"majour_version": 2,
"mode": false
}
]
ちなみに、最初ifで頑張っていたんだけれど、フィルタリングされてしまうので期待した出力にはならなかった
こんな感じ
if .name == "user01" then .mode=true else empty end
参考