Guide pratique de jq 1.7 pour la manipulation de JSON

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 --stream pour les fichiers JSON de plusieurs gigaoctets
  • L'option -e ajuste le code de sortie selon le résultat

Étiquettes: jq JSON ligne de commande traitement de données Filtres

Publié le 23 juin à 21h06