(verson: jq-1.5-1です)
jqにJSON食わせるといろいろ楽しいことがあるのですが
例えば以下のようなJSONから
{
"data": [
{
"id": "01",
"name": "a",
"fm": "m",
"model": "HOGE"
},
{
"id": "02",
"name": "some",
"fm": "f",
"model": "GIKO"
},
{
"id": "03",
"name": "any",
"fm": "m"
}
]
}
- key"model"のvalueが"HOGE"のオブジェクトを選ぶ場合
jq -r '.data[] | select(.model == "HOGE")'
- key"model"が存在するオブジェクトを選ぶ場合
jq -r '.data[] | select(.model)'
こんな感じで書いてやればよい。
では、
- key"model"のvalueが"HOGE"ではないオブジェクトを選ぶ場合
- key"model"が存在しないオブジェクトを選ぶ場合
どうすればいいかですが、まず
- key"model"のvalueが"HOGE"ではないオブジェクトを選ぶ場合
これは簡単。
jq -r '.data[] | select(.model != "HOGE")'
まぁ教えられるまでもないですが・・・
では、
- key"model"が存在しないオブジェクトを選ぶ場合
ですが色々試行錯誤して以下の感じでできることに気づきました。
jq -r '.data[] | select(has("model")|not)'
と、select,has,notを組み合わせればイケます。
hasはkeyの有無を判定するんですが、クオートしてやんないとダメっぽいです。
参考
公式マニュアル: https://stedolan.github.io/jq/manual/