I以下のJSONがあります選択または除外倍数は、IDの配列を持つオブジェクト
[
{
"id": "1",
"foo": "bar-a",
"hello": "world-a"
},
{
"id": "2",
"foo": "bar-b",
"hello": "world-b"
},
{
"id": "10",
"foo": "bar-c",
"hello": "world-c"
},
{
"id": "42",
"foo": "bar-d",
"hello": "world-d"
}
]
を私持っている変数に次の配列店:["1", "2", "56", "1337"]
(IDは文字列であることに注意してください、そして任意の正規を含むことができキャラクター)。
ありがとうございましたto this SO、元のデータをフィルタリングする方法が見つかりました。
[
{
"id": "1",
"foo": "bar-a",
"hello": "world-a"
},
{
"id": "2",
"foo": "bar-b",
"hello": "world-b"
}
]
しかし、私はまた、(それらを選択するのではなく、基本的に除くのID)反対を行うのが好きでしょう:jq 'jq '[.[] | select(.id == ("1", "2", "56", "1337"))]' ./data.json
(注意配列は括弧ではなく角括弧で囲まれている)が生成されます。 select(.id != ("1", "2", "56", "1337"))
を使用しても動作しません。jq '[. - [.[] | select(.id == ("1", "2", "56", "1337"))]]' ./data.json
を使用すると非常に醜いように見え、実際のデータ(出力はaws ec2 describe-instances
)では機能しません。
これを行うにはどうすればよいですか?ありがとうございました!
私はこれを好きですが、除外の場合は、「非常に醜い」と呼ばれる1つのOPです... –
こんにちは、ありがとうございました回答。最初のものでは、変数 "$ include"の名前を付けるとエラーになりますが、別の名前を付けると5分で機能します。しかしそれでも、リンクされているSOに言及されている方が良いです。しかし、除外ソリューションのためには、それはまだ少し醜いと思いますが、もっと重要なことは動作しません。私が言ったように、私の実際のJSONデータはAWS CLIから返されます(オブジェクトはかなり重いです)。 –
@Florentin:あなたの状況をよりよく代表する例を提供する必要があります。提供された答えは、与えられた例について望む結果を得ます。また、他のアプローチもありますが、私はこのアプローチをとった理由を表現するのが少し複雑です。ニーズに合ったソリューションが必要な場合は、詳細情報を提供する必要があります。 –