Concepts fondamentaux et utilisation basique
jq est un processeur JSON en ligne de commande utilisant des filtres pour transformer des données. Son modèle repose sur des opérations séquentielles :
Modèle de filtrage
Chaque filtre accepte des données JSON en entrée et produit une sortie. Les filtres peuvent être chaînés avec l'opérateur | :
echo '{"identite":"Bob"}' | jq '.'
Filtres élémentaires
Filtre identité : Restiute l'entrée sans modification
Sélection de champ : Extrait une propriété spécifique
echo '{"identite":"Bob","annees":25}' | jq '.identite'
Sélection sécurisée : Renvoie null pour les champs absents
Utilisation avancée en ligne de commende
Syntaxe d'appel
jq [options] <filtre> [fichiers...]
Options principales
| Catégorie | Option | Fonction |
|---|---|---|
| Entrée | -n | Utilise null comme entrée |
| Entrée | -R | Traitement de texte brut |
| Sortie | -c | Format compact (une ligne) |
| Sortie | -r | Chaînes brutes sans guillemets |
Opérations sur les structures JSON
Manipulation d'objets
.employe.nom_complet
.["nom-complexe"]
{nom: .client.prenom, id: .client.id}
Manipulation de tableaux
.elements[] | .valeur
[.liste[].etiquette]
.articles[2]
Chaînage de filtres
.membres[] | select(.credits > 100) | {pseudo, credits}
Fonctionnalités avancées
Conditions et fonctions
if .score >= 50 then "Reussi" else "Echec" end
def saluer($p): "Bonjour, \($p)!";
.message = saluer(.visiteur.nom)
Traitement d'erreurs
try .champ_inexistant catch "Absent"
Fichiers volumineux
jq --stream '...' gros_fichier.json
Exemples concrets
Extraction de données
curl https://api.demo.org/data | jq '.[] | {code, libelle}'
Transformation
map(.quantite * 1.2)
Agrégation
[.ventes[].total] | add
Structures complexes
. as $base | .produits[] | {designation, fournisseur: $base.fournisseurs[.idFourn]}
Considérations techniques
- Utiliser des guillemets simples pour les programmes jq dans le shell
- Précision numérique limitée pour les grands entiers
- Activer
--streampour les fichiers JSON de plusieurs gigaoctets - L'option
-eajuste le code de sortie selon le résultat