J'ai le fichier json suivant:
{
"FOO": {
"name": "Donald",
"location": "Stockholm"
},
"BAR": {
"name": "Walt",
"location": "Stockholm"
},
"BAZ": {
"name": "Jack",
"location": "Whereever"
}
}
J'utilise jq et je veux obtenir les éléments "nom" des objets où "emplacement" est "Stockholm".
Je sais que je peux obtenir tous les noms par
cat json | jq .[] | jq ."name"
"Jack"
"Walt"
"Donald"
Mais je ne peux pas comprendre comment imprimer uniquement certains objets, étant donné la valeur d'une sous-clé (ici "location" : "Stockholm"
).
Pour obtenir un flux contenant uniquement les noms:
produit:
Pour obtenir un flux de paires correspondantes (nom de clé, attribut "nom"), envisagez:
Production:
la source
name
variable clé (utilisez une fonction shell avec$1
comme paramètre) ne fonctionne pas:termux-contact-list |jq -r '.[] | select(.name=="$1")|.number'
. Je l'appelle commecool_fn Name1
. Cependant, cela fonctionne:termux-contact-list |jq -r '.[] | select(.name=="Name1")|.number'
J'avais une question similaire similaire: que se passerait-il si vous vouliez retrouver le format d'objet d'origine (avec des noms de clé, par exemple FOO, BAR)?
Jq fournit
to_entries
etfrom_entries
convertit entre les objets et les tableaux de paires clé-valeur. Cela avecmap
autour de la sélectionEn utilisant la
with_entries
sténographie, cela devient:la source
with_entries()
, vous souhaitez généralement utiliser également.value
dans laselect
clause. Cela est dû au fait que lato_entries
macro convertit les entrées données en.key
et.value
paire, ce qui se produit également avecwith_entries
.