2017-01-06 1 views
1

En utilisant JMESPath, est-il possible de filtrer la sortie en fonction de l'existence de plusieurs paires clé/valeur dans l'entrée?Sortie de filtre basée sur l'existence de plusieurs paires clé/valeur

Dans l'exemple ci-dessous JSON, ce que je voudrais faire est d'extraire uniquement les objets qui contiennent ces paires clé/valeur dans Tags -

Environnement/ABC
Projet/Projet2

Le plus proche que je peux obtenir est de sélectionner un seul Tag correspondant, mais j'ai besoin du reste de l'objet, et je dois également faire correspondre à l'autre paire clé/valeur -

Stacks[*].Tags[?Key=='Environment' && Value=='ABC'] 

Voici une exaple entrée JSON -

{ 
    "Stacks": [ 
     { 
      "StackId": "abc123", 
      "Tags": [ 
       { 
        "Value": "Project 1", 
        "Key": "Project" 
       }, 
       { 
        "Value": "ABC", 
        "Key": "Environment" 
       } 
      ], 
      "CreationTime": "2016-07-20T14:49:27.891Z", 
      "StackName": "TestStack1", 
      "NotificationARNs": [], 
      "StackStatus": "CREATE_COMPLETE", 
      "DisableRollback": false 
     }, 
     { 
      "StackId": "xyz123", 
      "Tags": [ 
       { 
        "Value": "Project 1", 
        "Key": "Project" 
       }, 
       { 
        "Value": "XYZ", 
        "Key": "Environment" 
       } 
      ], 
      "CreationTime": "2016-07-20T14:49:27.891Z", 
      "StackName": "TestStack2", 
      "NotificationARNs": [], 
      "StackStatus": "CREATE_COMPLETE", 
      "DisableRollback": false 
     }, 
     { 
      "StackId": "asd123", 
      "Tags": [ 
       { 
        "Value": "Project 2", 
        "Key": "Project" 
       }, 
       { 
        "Value": "ABC", 
        "Key": "Environment" 
       } 
      ], 
      "CreationTime": "2016-07-20T14:49:27.891Z", 
      "StackName": "TestStack3", 
      "NotificationARNs": [], 
      "StackStatus": "CREATE_COMPLETE", 
      "DisableRollback": false 
     } 
    ] 
} 

Et voici la sortie que je requiers -

{ 
    "StackId": "asd123", 
    "Tags": [ 
     { 
      "Value": "Project 2", 
      "Key": "Project" 
     }, 
     { 
      "Value": "ABC", 
      "Key": "Environment" 
     } 
    ], 
    "CreationTime": "2016-07-20T14:49:27.891Z", 
    "StackName": "TestStack3", 
    "NotificationARNs": [], 
    "StackStatus": "CREATE_COMPLETE", 
    "DisableRollback": false 
} 

Répondre

4

Vous pouvez utiliser des filtres imbriqués:

Stacks[? Tags[? Value=='ABC' && Key=='Environment']]

+0

brillant, Merci. Pour être complet, j'ai utilisé 'Stacks [? Mots clés[? Valeur == 'ABC' && Touche == 'Environnement'] && Tags [? Valeur == 'Project' && Key == 'Project2']] 'et ça fonctionne comme un charme. –