Commandes utiles avec Jq

illustration de l'article

Lorsqu’on veut manipuler du JSON dans son terminal, la commande Jq devient indispensable

Formater un Json

Exemple de json

{"message": "success", "timestamp": 1618312570, "iss_position": {"longitude": "104.5549", "latitude": "9.1914"}}
echo $JSON | jq '.' 
{
  "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

Récupérer un champ de 1er niveau

curl http://api.open-notify.org/iss-now.json | jq '.timestamp'
1618312570

Récupérer un champ de 2eme niveau

curl http://api.open-notify.org/iss-now.json | jq '.iss_position.latitude'
"9.1914"

Manipuler des tableaux

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

curl http://api.open-notify.org/astros.json | jq '.people[]' | jq '.name'

.people[] renvoie les éléments dans le tableau, pas le tableau

Autre méthode

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

Fonctions

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
]

Récré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
}

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."))'