JavaScript Object Notation (JSON) est l'un des formats de données les plus utilisés au monde. Grâce à son support étendu et à sa spécification simple, il s'intègre facilement dans de nombreux langages de programmation, particulièrement pour le développement web.
Cependant, l'inspection manuelle de données JSON peut s'avérer ardue. Bien que ce format soit lisible par l'homme, les fichiers contiennent souvent des volumes massifs de données non formatées.
L'outil en ligne de commande jq vous permet de formater, filtrer et transformer ces données JSON avec efficacité.
En tant qu'outil de ligne de commande, jq s'utilise principalement dans un terminal. Un playground en ligne est également disponible pour des tests rapides, comme nous le verrons ci-dessous.
Son principe repose sur l'application de filtres à des données JSON en entrée. Vous pouvez extraire un élément spécifique d'un ensemble, supprimer des champs inutiles ou même restructurer les données de manière avancée.
jq ne dépend d'aucun composant externe, ce qui facilite son installation. Téléchargez le binaire exécutable pour Linux, macOS ou Windows depuis la page officielle. Exécutez-le directement en ligne de commande. Pour plus de confort, renommez-le (mv jq-osx-amd64 jq) et rendez-le exécutable (chmod +x jq).
Vérifiez l'installation en lançant :
$ ./jqVous devriez voir l'aide, commençant par : jq - Command-line JSON processor [version 1.6].
Si besoin, utilisez les gestionnaires de paquets (apt, brew, etc.) ou testez en ligne en attendant.
Syntaxe standard :
jq [options] 'filtre' [fichier...]Exemple :
$ jq '.' data.jsonOu via pipe :
$ echo '{"name":"john"}' | jq '.'
{
"name": "john"
}Le filtre . (point) formate joliment l'entrée. Idéal après un curl récupérant du JSON d'une API.
Un filtre jq ressemble à un sélecteur CSS ou XPath : une expression composée de primitives simples.
Accédez à une propriété via .propriété :
$ echo '{"name":"john"}' | jq '.name'
"john"
Chaînage pour structures imbriquées :
$ echo '{"name":{"first":"john","last":"smith"}}' | jq '.name.last'
"smith"
Index (à partir de 0) :
$ echo '[1,2,3]' | jq '.[2]'
3
Slice :
$ echo '[1,2,3]' | jq '.[1:3]'
[
2,
3
]
Itération :
$ echo '[1,2,3]' | jq '.[]'
1
2
3
Consultez le manuel officiel pour les opérateurs, variables et fonctions personnalisées. jq rivalise avec un langage de programmation.
Exemples intégrés :
$ echo '[2,4,8]' | jq 'add / length'
4.666666666666667
Division de chaîne :
$ echo '"Just testing"' | jq '. / " "'
[
"Just",
"testing"
]
Filtrage avec select et pipe | :
$ echo '[2,4,8]' | jq '.[] | select(. >= 3)'
4
8
map applique une opération à chaque élément :
$ echo '[1,2,3]' | jq 'map(.+1)'
[
2,
3,
4
]
$ echo '[2,4,8]' | jq 'map(select(.>=3))'
[
4,
8
]
Traitez du JSON d'une API via curl :
JSON Feed (alternative à RSS) chez NPR :

Formaté :
$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'
Filtre avancé : ID, titre et date des articles publiés un mardi :
$ curl -s https://feeds.npr.org/1019/feed.json | \
jq '.items[] | select( (.date_published | .[0:19] + "Z" | fromdate | strftime("%a") == "Tue") | {id: .id, title: .title, date: .date_published}'Exemple de sortie (variable selon date) :
{
"id": "959667930",
"title": "Deplatforming: Not a First Amendment issue, but still a tough call for Big Tech",
"date": "2021-01-26T17:00:00-05:00"
}
Voir aussi : Analyse JSON avec Python : guide simple
Testez jq sans installation sur jqplay.org. Interface intuitive pour JSON, filtres et options (--compact-output, --null-input).
Feuille de triche intégrée :

Ressources : Tutoriel et manuel jq. Aide via jq --help.
Parfait pour filtrages basiques ou lecture de gros JSON.
[]