Commandes utiles avec Jq
Publié le
Lorsqu’on veut manipuler du JSON dans son terminal, la commande Jq devient indispensable
Formater un Json
Exemple de json “inline”
{"message": "success", "timestamp": 1618312570, "iss_position": {"longitude": "104.5549", "latitude": "9.1914"}}
echo $JSON | jq '.'
La réponse formatée avec identation
{
"message": "success",
"timestamp": 1618312570,
"iss_position": {
"longitude": "104.5549",
"latitude": "9.1914"
}
}
Réponse Json via Curl
curl http://api.open-notify.org/iss-now.json | jq '.'
Récupérer uniquement certains champs
Pour récupérer un champ de 1er niveau, il suffit de préfixer le nom du champ par un .
curl http://api.open-notify.org/iss-now.json | jq '.timestamp'
1618312570
Pour récupérer un champ de 2eme niveau, on chaine les appels
curl http://api.open-notify.org/iss-now.json | jq '.iss_position.latitude'
"9.1914"
Manipuler des tableaux
Récupérer un tableau
Exemple de données issues du site de la Nasa via http://api.open-notify.org/astros.json
{
"message": "success",
"number": 10,
"people": [
{
"craft": "ISS",
"name": "Sergey Ryzhikov"
},
{
"craft": "ISS",
"name": "Kate Rubins"
},
{
"craft": "ISS",
"name": "Sergey Kud-Sverchkov"
},
{
"craft": "ISS",
"name": "Mike Hopkins"
},
{
"craft": "ISS",
"name": "Victor Glover"
},
{
"craft": "ISS",
"name": "Shannon Walker"
},
{
"craft": "ISS",
"name": "Soichi Noguchi"
},
{
"craft": "ISS",
"name": "Mark Vande Hei"
},
{
"craft": "ISS",
"name": "Oleg Novitskiy"
},
{
"craft": "ISS",
"name": "Pyotr Dubrov"
}
]
}
Pour récupérer le tableau des personnes
curl http://api.open-notify.org/astros.json | jq '.people'
Limiter les champs retournés
Pour lister le nom de chacune des personnes
Option 1 : en refirigeant la sortie Json de la commande jq vers une autre commande jq
curl http://api.open-notify.org/astros.json | jq '.people[]' | jq '.name'
.people[] renvoie les éléments dans le tableau, pas le tableau
Option 2 : en une commande
curl http://api.open-notify.org/astros.json | jq '.people[].name'
Limiter les nombre de lignes et champs retournés
Récupérer le nom des 3 premières personnes
curl http://api.open-notify.org/astros.json | jq '.people[:3]' | jq '.[].name'
on renvoie un tableau avec les 3 premiers élements
Fonctions internes
Récupérer la longueur d’un tableau
Compter les personnes
curl http://api.open-notify.org/astros.json | jq '.people | length'
Récupérer uniquement les clés d’un tableau
Lister les clés de la réponse
curl http://api.open-notify.org/astros.json | jq '. | keys'
Modifier les valeurs avec une fonction
Manipuler les valeurs avec map
echo '[12,14,15]' | jq 'map(.-2)'
[
10,
12,
13
]
Recréer des valeurs
curl http://api.open-notify.org/astros.json | jq '.people[:3] | .[] | ({username: .name, length: (.name | length) })'
{
"username": "Sergey Ryzhikov",
"length": 15
}
{
"username": "Kate Rubins",
"length": 11
}
{
"username": "Sergey Kud-Sverchkov",
"length": 20
}
Filtrer avec des Regex
Récupérer les personnes dont le nom commence par “S”
curl http://api.open-notify.org/astros.json | jq '.people[] | select(.name | test("S."))'
Pour aller plus loin
La documentation officielle de Jq regorge d’exemples.
Jq est une librairie puissante dont on peut difficilement se passer lorsqu’on traite avec des API en ligne de commande.