JMESPath JSON-фильтр с несколькими совпадениями

У меня есть блок json, который выглядит примерно так (вы догадались по AWS)

{ "Vpcs":[ 
  {
    "VpcId":"vpc-blabla1",
    "OtherKey":"Value"
  },
  {
    "VpcId":"vpc-blabla2",
    "OtherKey":"Value"
  },
  {
    "VpcId":"vpc-blabla3",
    "OtherKey":"Value"
  },
  {
    "VpcId":"vpc-blabla4",
    "OtherKey":"Value"
  }]
}

Я хочу использовать JMESPath, чтобы получить значение OtherKey для vpc-blabla1 и vpc-blabla3 (примерами может быть любой список vpc-id)

Я могу получить blabla1 с фильтром JMESpath

Vpcs[?VpcId=='blabla1'].OtherKey

Но я не могу найти синтаксис для нескольких значений? Я пробовал использовать синтаксис Or || и составной синтаксис | но ни то, ни другое не работает? - Смотрите ниже, что я пробовал.

 Vpcs[?VpcId=='blabla1' || 'blabla1'].OtherKey
 Vpcs[?VpcId=='blabla1' || ?VpcId=='blabla1'].OtherKey
 Vpcs[(?VpcId=='blabla1') || (?VpcId=='blabla1')].OtherKey
 Vpcs[?VpcId=='blabla1' | ?VpcId=='blabla1'].OtherKey

Какие-либо предложения? Возможно ли это, или мне придется собирать по одному набору результатов за раз и рекомбинировать результаты, которые я хочу?


person Sam    schedule 21.06.2016    source источник


Ответы (1)


Общий синтаксис для multiple - [? expr1 || expr2], поэтому в вашем случае вы можете использовать:

Vpcs[?VpcId=='vpc-blabla1' || VpcId=='vpc-blabla2'].OtherKey

Другой вариант, если у вас много идентификаторов VPC, которые вы ищете, вы также можете сказать:

Vpcs[?contains(`["vpc-blabla1", "vpc-blabla2"]`, VpcId)].OtherKey
person jamesls    schedule 21.06.2016
comment
Превосходно. Я был так близко, что просто не видел ответа в документации. - person Sam; 21.06.2016