Lorsqu’on veut manipuler du JSON dans son terminal, la commande Jq devient indispensable
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 '.'
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"
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'
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'
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
Compter les personnes
curl http://api.open-notify.org/astros.json | jq '.people | length'
Lister les clés de la réponse
curl http://api.open-notify.org/astros.json | jq '. | keys'
Manipuler les valeurs avec map
echo '[12,14,15]' | jq 'map(.-2)'
[
10,
12,
13
]
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
}
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."))'
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.