2017-09-12 5 views
1

J'ai un tableau de plusieurs JSON. Je voudrais obtenir le nombre de JSON qui contiennent une valeur spécifique.jq obtenir le nombre de jsons dans un tableau contenant une valeur spécifique

Exemple:

[ 
{ 
    "key": "value1", 
    "2ndKey":"2ndValue1" 
}, 
{ 
    "key": "value2", 
    "2ndKey":"2ndValue2" 
}, 
{ 
    "key": "value1", 
    "2ndKey":"2ndValue3" 
} 
] 

Donc, au cas où je suis à la recherche de valeur1 dans la clé, le résultat devrait être 2.

Je voudrais obtenir une solution à l'aide JQ. J'avais déjà quelques essais, mais ils ne fonctionnaient pas complètement. Le meilleur était encore le suivant:

cat /tmp/tmp.txt | jq ' select(.[].key == "value1") | length ' 

J'obtiens les résultats corrects mais il est montré plusieurs fois.

Quelqu'un peut-il m'aider à améliorer mon code? Merci d'avance!

Répondre

1

Vous êtes assez proche. Essayez cette

map(select(.key == "value1")) | length 

ou l'équivalent

[ .[] | select(.key == "value1") ] | length 
+0

C'est ce que je cherchais! Merci beaucoup! – Philipp

1

Un moyen efficace et pratique de compter est d'utiliser « count » tel que défini ci-dessous:

def count(s; cond): reduce s as $x (0; if ($x|cond) then .+1 else . end); 
count(.[]; .key == "value1")