J'ai un fichier json people.json:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Sally" : {"Job" : "Programmer", "Age" : 32},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
Je voudrais sélectionner tout le monde qui est un clown. Ma sortie devrait ressembler à ceci:
{
"Joe" : {"Job" : "Clown", "Age" : 22},
"Anne" : {"Job" : "Clown", "Age" : 29}
}
J'ai essayé l'opérateur .. comme dans
cat people.json | jq '. | map(select(.Job == "Clown"))'
Mais cela semble correspondre à Joe et Anne à plusieurs niveaux et produit plus de résultats que je ne le souhaite. Des idées? Merci.
utilisez with_entries
pour convertir vers/à partir d'un format intermédiaire qui représente ces données sous la forme d'un tableau d'objets avec des éléments key
et value
:
cat people.json | jq 'with_entries(select(.value.Job == "Clown"))'
selon les documents ici: http://stedolan.github.io/jq/manual/
Voici une solution utilisant réduire
. as $v
| reduce keys[] as $k (
{};
if $v[$k].Job == "Clown" then .[$k] = $v[$k] else . end
)