Transformer du JSON avec jq : guide interactif
(navendu.me)jqest un outil en ligne de commande pour manipuler des données JSON, installé par défaut sur la plupart des distributions Linux- Il est utile pour afficher joliment les données JSON (pretty print) ou pour les transformer à l’aide de filtres
- Il est suffisamment puissant pour figurer parmi les 5 outils CLI que les développeurs devraient absolument apprendre, et permet d’effectuer simplement de nombreuses tâches autour des données JSON
Installation de jq et usage de base
-
Méthodes d’installation
jqpeut être installé via la plupart des gestionnaires de paquets, ou bien en téléchargeant directement le binaire ou en le compilant depuis les sources- Après l’installation, vous pouvez vérifier son fonctionnement avec la commande
jq
-
Exemple d’utilisation de base
- Afficher joliment des données JSON :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- Afficher joliment des données JSON :
-
Exemple de filtre JSON
- Filtrer les données selon une condition précise :
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Filtrer les données selon une condition précise :
Fonctionnalités principales de jq
Filtres de base
-
Filtre Identity
- Afficher les données d’entrée sans les modifier :
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Afficher les données d’entrée sans les modifier :
-
Accès à un champ spécifique
- Sélectionner un champ précis dans un objet JSON :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Accéder à un champ imbriqué :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Sélectionner un champ précis dans un objet JSON :
Traitement des tableaux
-
Accès aux éléments d’un tableau
- Sélectionner l’élément à un index donné dans un tableau JSON :
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Sélectionner l’élément à un index donné dans un tableau JSON :
-
Découpage de tableau
- Extraire un sous-tableau sur une plage donnée :
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Extraire un sous-tableau sur une plage donnée :
-
Itération sur un tableau
- Appliquer un filtre à chaque élément du tableau :
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Appliquer un filtre à chaque élément du tableau :
Création d’un nouveau JSON
-
Créer un nouvel objet
- Créer un nouvel objet JSON à partir des champs sélectionnés :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Créer un nouvel objet JSON à partir des champs sélectionnés :
-
Créer un nouveau tableau
- Créer un tableau à partir des données transformées :
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Créer un tableau à partir des données transformées :
Fonctionnalités avancées de jq
Utilisation des fonctions
-
Calcul de longueur
- Calculer la longueur d’une chaîne :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Calculer la longueur d’une chaîne :
-
Extraction des clés
- Renvoyer les clés d’un objet sous forme de tableau :
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Renvoyer les clés d’un objet sous forme de tableau :
-
Fonction map
- Appliquer un filtre à chaque élément d’un tableau :
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Appliquer un filtre à chaque élément d’un tableau :
Sélection des données
- Sélectionner des données selon une condition
- Filtrer les données qui satisfont une condition spécifique :
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Filtrer les données qui satisfont une condition spécifique :
Transformation et exploitation du JSON
-
Transformation JSON avancée
- Filtres pour regrouper les données ou calculer des statistiques :
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Filtres pour regrouper les données ou calculer des statistiques :
-
Traitement de JSON volumineux
- Traiter efficacement de gros volumes de données JSON :
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Traiter efficacement de gros volumes de données JSON :
-
Possibilité de s’exercer dans le jq Playground
3 commentaires
Merci pour ce résumé ! C’est vraiment une info en or.
> Assez puissant pour figurer parmi les 5 outils CLI que les développeurs doivent absolument apprendre,
Mais je suis aussi curieux de savoir quels sont les 4 autres outils CLI, et comme l’article n’en parle pas, ça finit par ressembler à un MacGuffin..
https://navendu.me/posts/jq-interactive-guide/….
En regardant l’article original, on voit :
> jq is on every “five command line tools to learn as a developer” video on YouTube.
Cette phrase y figure.
Les quatre autres ne sont pas précisés, mais j’imagine que
jqest systématiquement mentionné dans ce genre de vidéos de recommandation d’outils CLI, haha.