Vous êtes très proche! Quelques choses cependant:
null
n'est pas 'null'
- Après la conduite que vous allez travailler avec les résultats de la première expression
- comme
null
, true
n'est pas une chaîne (== true
est également redondant)
jmespath.org A un éditeur en direct que vous pouvez utiliser pour tester des expressions. Voici une JSON simplifiée que nous pouvons utiliser pour tester ce cas:
{
"DistributionList": {
"Items": [
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
},
{
"Id": "bar",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.othercompany.com"
]
}
},
{
"Id": "baz",
"Aliases": {
"Quantity": 0
}
}
]
}
}
Commençons par la première partie de l'expression. La seule solution dont vous avez besoin est de prendre les citations de null:
DistributionList.Items[?Aliases.Items!=null]
qui filtrera avec succès des éléments sans Items
sous Alias
. Voici ce que vous revenez si vous me suis arrêté là, et ce que vous aurez à travailler avec le tuyau après:
[
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
},
{
"Id": "bar",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.othercompany.com"
]
}
}
]
Notez qu'il n'y a pas DistributionList.Items
plus.
Alors maintenant, nous voulons filtrer pour un CNAME spécifique. Laissons de côté la tautologie == true
.
[?contains(Aliases.Items, 'cname.cdn.mycompany.com')]
Ainsi, la pleine expression est maintenant:
DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')]
Et le résultat est la liste filtrée avec succès:
[
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
}
]
Maintenant, si vous voulez que les numéros d'identification des éléments correspondants, il suffit d'ajouter .Id
à cette dernière expression. Si vous savez qu'il n'y en aura qu'un, vous pouvez simplement sélectionner cet élément avec un autre tuyau et [0]
.
DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')].Id | [0]
Et vous obtenez l'Id que vous voulez!
"foo"
Merci pour cette explication très claire! :-) –