2017-10-19 7 views
0

J'essaie de configurer une alerte lorsque l'état de l'objet JSON suivant indique autre chose que le démarrage. Je commence à jouer avec le jq conditionnel mais je ne sais pas comment implémenter regex dans ce domaine.jq s'affiche uniquement lorsque l'objet ne correspond pas

{ 
    "page": 0, 
    "page_size": 100, 
    "total_pages": 10, 
    "total_rows": 929, 
    "headers": [ 
    "*" 
    ], 
    "rows": [ 
    { 
     "id": "168", 
     "state": "STARTED" 
    }, 
    { 
     "id": "169", 
     "state": "FAILED" 
    }, 
    { 
     "id": "170", 
     "state": "STARTED" 
    } 
    ] 
} 

Je veux seulement afficher l'id et de l'état de l'objet a échoué, ce que j'ai essayé

jq '.rows[] | .id, select(.state | contains("!STARTED"))' test.json 

Je voudrais ma sortie soit quelque chose comme

{ 
"id": "169", 
"state": "FAILED" 
} 

Répondre

1

Si vous voulez simplement imprimer les objets pour lesquels .state n'est PAS "STARTED", utilisez simplement la négation:

.rows[] | select(.state != "STARTED") 

Si l'état "démarré" est associé à plusieurs valeurs, veuillez donner plus de détails. Il ne sera peut-être pas nécessaire d'utiliser des expressions régulières. Si vous avez vraiment besoin d'utiliser des expressions régulières, vous voudrez probablement utiliser test.