Disons que j'ai le JSON suivant, stocké dans ma variable jsonVariable .
{
"id": 1,
"details": {
"username": "jamesbrown",
"name": "James Brown"
}
}
J'analyse ce JSON avec jq en utilisant les éléments suivants:
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
Cela me donnerait la sortie
James Brown
Mais que se passe-t-il si je souhaite également obtenir l'identifiant de cette personne? Maintenant, je suis conscient que c'est un exemple simple et approximatif - le programme avec lequel je travaille en ce moment a une profondeur de 5 ou 6 niveaux et de nombreuses fonctions différentes de JQ autres que select. J'ai besoin d'un moyen de sélectionner le champ d'un parent alors que j'ai déjà 5 ou 6 couches de profondeur après avoir effectué diverses méthodes de filtrage.
Quelqu'un peut-il aider? Y a-t-il un moyen de "faire l'inverse", de revenir au parent? (Je ne sais pas si j'ai du sens!)
Plutôt que d'interroger jusqu'à la valeur que vous testez, interrogez jusqu'à l'objet racine contenant la valeur sur laquelle vous interrogez et les valeurs que vous souhaitez sélectionner.
Vous avez besoin de l'objet contenant à la fois id
et name
.
$ jq --arg name 'James Brown' 'select(.details.name == $name).id' input.json
Donnez un coup de feu:
echo $jsonVariable | jq '{Name: .details.name, Id: .Id} | select(.name == "James Brown")'