jq json

jq json

Notes › _DIFFUSION

jq permet de lire, filtrer et transformer du JSON depuis la ligne de commande.

Installation

1
2
3
4
5
# Debian/Ubuntu
sudo apt install jq

# macOS
brew install jq

Lire un fichier JSON

Avec data.json :

1
2
3
4
5
{
  "nom": "Alice",
  "age": 30,
  "roles": ["admin", "user"]
}

Afficher tout le contenu :

1
jq . data.json

Afficher une propriété :

1
jq '.nom' data.json

Résultat :

1
"Alice"

Afficher la valeur sans les guillemets :

1
jq -r '.nom' data.json

Résultat :

1
Alice

Afficher plusieurs propriétés :

1
jq '{nom: .nom, age: .age}' data.json

Parcourir un tableau

Pour ce JSON :

1
2
3
4
5
6
{
  "utilisateurs": [
    {"nom": "Alice", "age": 30},
    {"nom": "Bob", "age": 25}
  ]
}

Afficher les noms :

1
jq -r '.utilisateurs[].nom' data.json

Filtrer les utilisateurs de plus de 25 ans :

1
jq '.utilisateurs[] | select(.age > 25)' data.json

Afficher uniquement leur nom :

1
jq -r '.utilisateurs[] | select(.age > 25) | .nom' data.json

Parser la sortie d’une commande

1
curl -s https://api.example.com/users | jq '.users[] | .name'

Avec une variable shell :

1
2
3
JSON='{"nom":"Alice","age":30}'

echo "$JSON" | jq -r '.nom'

Transformer les données

Créer une nouvelle structure :

1
jq '.utilisateurs[] | {nom: .nom, majeur: (.age >= 18)}' data.json

Compter les éléments :

1
jq '.utilisateurs | length' data.json

Trier :

1
jq '.utilisateurs | sort_by(.age)' data.json

Extraire les noms dans un tableau :

1
jq '[.utilisateurs[].nom]' data.json

Valeurs par défaut et champs optionnels

Éviter une erreur si un champ est absent :

1
jq '.email // "email inconnu"' data.json

Accéder à un champ imbriqué :

1
jq '.adresse.ville' data.json

Avec l’opérateur optionnel :

1
jq '.adresse?.ville' data.json

Les opérateurs essentiels sont :

  • .champ : accéder à une propriété ;
  • .tableau[] : parcourir un tableau ;
  • select(...) : filtrer ;
  • | : enchaîner des opérations ;
  • -r : produire du texte brut ;
  • // : fournir une valeur par défaut ;
  • length : compter ou mesurer ;
  • map(...) : transformer les éléments d’un tableau.

Par exemple, une commande fréquente est :

1
jq -r '.results[] | select(.active == true) | .name' data.json