次のJSONがあります。
{
"Vpcs": [
{
"VpcId": "vpc-1",
"OwnerId": "abc"
},
{
"VpcId": "vpc-2",
"OwnerId": "def"
}
]
}
要素だけがOwnerId!=abc
欲しいが、Vpcsの親配列はそのまま維持したいと思います。
これにより、echo $JSON|jq -r '.Vpcs[]|select(.OwnerId!="abc")
次のような結果が得られます。
{
"VpcId": "vpc-2",
"OwnerId": "def"
}
これは私が望むものと似ていますが、親配列はありません。だから私は次のようにselectステートメントに親配列を入れなければならないと思いました。
echo $JSON |jq -r '.|select(.Vpcs[].OwnerId!="abc")'
しかし、これは私が望むデータをフィルタリングしないようです。
{
"Vpcs": [
{
"VpcId": "vpc-1",
"OwnerId": "abc"
},
{
"VpcId": "vpc-2",
"OwnerId": "def"
}
]
}
次のような結果を得るにはどうすればよいですか?
{
"Vpcs": [
{
"VpcId": "vpc-2",
"OwnerId": "def"
}
]
}
答え1
構造を「再構築」することがオプションの場合は、次のことができます。
jq '.Vpcs[]|select(.OwnerId!="abc")|{Vpcs: [.]}'