JavaScript Object Notation JSON est l'un des formats de données les plus populaires au monde. Il bénéficie d'une prise en charge étendue et d'une spécification simple. Il est facile de travailler avec de nombreux langages de programmation, en particulier ceux ciblant le développement Web.
Mais l'inspection manuelle des données JSON reste délicate. Bien qu'il s'agisse d'un format de texte lisible par l'homme, un ensemble de données JSON peut contenir d'énormes quantités de données. Les sources ne formateront pas toujours JSON sous une forme facile à lire.
javaThe jq l'outil permet aux utilisateurs de formater, filtrer et transformer les données JSON.
Qu'est-ce que jq?
Puisque c'est un ligne de commande outil, vous utiliserez généralement jq en tapant des commandes dans un terminal. Il existe également un excellent terrain de jeu en ligne disponible, que nous aborderons plus en détail ci-dessous.
Que vous soyez nouveau sur Linux ou un vétéran de Linux chevronné, la ligne de commande offre une multitude d'utilisations. Essayez ces conseils pour maîtriser la ligne de commande.
Le fonctionnement normal tourne autour des filtres et de l'application d'un filtre à certains JSON d'entrée. Vous pouvez utiliser jq pour récupérer un seul élément dans un ensemble de plusieurs éléments. Vous pouvez également supprimer certains champs de chaque élément d'un ensemble, ce qui simplifie les données.Vous pouvez même effectuer des opérations complexes pour traduire l'entrée sous une forme différente.
Comment télécharger et installer jq
Le programme jq n'a pas de dépendances externes, ce qui signifie qu'il est très facile de démarrer. Commencez par télécharger un binaire exécutable pour Linux, macOS ou Windows via le bouton sur le page d'accueil jq . Une fois le programme téléchargé, vous pouvez l'exécuter directement à partir de la ligne de commande. Vous voudrez peut-être le renommer mv jq-osx-amd64 jq pour plus de commodité, et vous devrez peut-être le rendre exécutable chmod + x jq .
Confirmez que vous pouvez exécuter jq en l'exécutant à partir de la ligne de commande sans argument:
$ ./jq
Vous devriez voir des informations générales sur l'utilisation, en commençant par un simple résumé en une ligne comme le suivant:
jq - processeur JSON en ligne de commande [version 1.6]
Si vous avez des difficultés avec l'approche ci-dessus, il existe des alternatives. Le logiciel jq prend en charge les gestionnaires de packages courants, et vous pouvez toujours expérimenter avec le bac à sable en ligne entre-temps.
Utilisation de base de jq
L'utilisation standard est:
jq [options] [fichier ...]
Donc, par exemple:
$ jq '.' Data.json
Vous pouvez également diriger l'entrée via une autre commande comme ceci:
$ echo '{"nom": "john"}' | jq '.'
{
"nom": "john"
}
Ceci est plus utile lorsque, par exemple, la première commande est quelque chose comme un appel à boucle qui peut récupérer des données JSON à partir d'un service Web.
Le filtre illustré dans ces exemples est le plus simple possible, . Un point , qui imprime l'entrée sous une forme plus jolie. C'est déjà très utile, mais les filtres de jq fournissent beaucoup plus de puissance que cela.
Comment appliquer des filtres de base à JSON en utilisant jq
Un filtre jq est un peu comme un sélecteur CSS ou une expression XPATH. C'est une longue expression composée de parties plus petites. Un filtre complet peut sembler compliqué, mais une fois que vous avez appris les bases, chaque partie doit être compréhensible.
Travailler avec des objets
Vous pouvez récupérer la valeur d'une propriété d'objet en utilisant le .property syntaxe:
$ echo '{"nom": "john"}' | jq '.nom'
"john"
Cela peut enchaîner pour accéder aux structures imbriquées profondément:
$ echo '{"nom": {"premier": "john", "dernier": "smith"}}' | jq '.name.last'
"smith"
Travailler avec des tableaux
L'opération de tableau la plus simple renvoie un élément via son index:
$ echo '[1,2,3]' | jq '. [2]'
3
Notez que, comme avec la plupart des langages de programmation, jq indexe les tableaux à partir de la position 0. Vous pouvez également découper un sous-tableau en utilisant cette syntaxe:
$ echo '[1,2,3]' | jq '. [1: 3]'
[
2,
3
]
Sans index entre crochets, jq transforme une seule valeur de tableau en son propre contenu, sous forme de valeurs multiples :
$ echo '[1,2,3]' | jq '. []'
1
2
3
C'est une méthode importante pour enchaîner les filtres ensemble, que nous montrerons plus tard.
Fonctions plus avancées
Vous ne pouvez acquérir une compréhension complète de la puissance de jq qu'en lisant le manuel jq . En fait, la prise en charge par jq des opérateurs, des variables et même des fonctions définies par l'utilisateur le rend capable d'agir comme n'importe quel langage de programmation.
Ces fonctionnalités permettent une utilisation avancée, bien que compliquée. Mais jq possède des fonctionnalités intégrées, telles que des fonctions et des opérateurs, qui profitent même aux tâches simples. Voici un exemple:
$ echo '[2,4,8]' | jq 'ajouter / longueur'
4.666666666666667
Ce filtre alimente l'entrée dans les deux ajouter et longueur fonctions, division des résultats. En fonctionnement, il calcule la moyenne d'un tableau de nombres.
L'opérateur de division peut également agir sur des chaînes pour les fractionner en fonction d'un séparateur:
$ echo '"Juste tester"' | jq '. / ""'
[
"Juste",
"test"
]
Le sélectionner la fonction filtre un tableau, ne conservant que les éléments qui passent une contrainte donnée:
$ echo '[2,4,8]' | jq '. [] | Select .> = 3'
4
8
Notez que c'est aussi un exemple de l'opérateur pipe de jq | qui est comme le tuyau d'un shell.Il alimente le résultat de son filtre de gauche comme entrée de son filtre de droite.
Le carte la fonction est très utile lorsque vous travaillez avec des tableaux. Elle effectue une opération sur chaque élément du tableau plutôt que sur l'ensemble du tableau lui-même :
$ echo '[1,2,3]' | jq 'map . + 1'
[
2,
3,
4
]
Vous l'utiliserez souvent en conjonction avec select, par exemple
$ echo '[2,4,8]' | jq 'map sélectionnez .> = 3'
[
4,
8
]
Mettre tout cela ensemble: un exemple pratique de jq
Puisque jq traite tout JSON valide qui lui est acheminé, vous pouvez lui envoyer une sortie depuis le boucle commande. Cela vous permet de récupérer le JSON à partir d'une URL et de le traiter immédiatement sur la ligne de commande:
Flux JSON est une alternative JSON aux formats RSS et Atom. Le site NPR est un exemple qui prend en charge JSON Feed, mais il est difficile à afficher depuis la source et contient beaucoup de données :
Tout de suite, vous pouvez voir à quel point il est plus facile de lire en récupérant ces données et en les acheminant via jq :
$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'
Voici un exemple plus complet de filtre qui récupère l'identifiant, le titre et la date de chaque histoire que le site a publiée un mardi.
$ curl -s https://feeds.npr.org/1019/feed.json |
jq '.items |. [] |
sélectionnez
.date_published |
. [0:19] + "Z" |
à partir de la date |
strftime "% a" == "Mar"
|
{id: .id, titre: .title, date: .date_published} '
Après avoir sélectionné le éléments propriété, ce filtre utilise . [] pour parcourir chaque élément. La majeure partie du filtre utilise le sélectionner fonction pour ne garder que les messages avec un date_publiée valeur dont le jour de la semaine strftime "% a" est mar. . Le strftime la fonction nécessite une date formatée très spécifiquement que le filtre . [0:19] + "Z" constructions.
Après avoir sélectionné les éléments souhaités, le filtre final crée un objet pour chacun d'eux avec les champs obligatoires. Notez que chaque fois que le flux change, les résultats seront différents. Voici un exemple pris au moment de la publication:
{
"id": "959667930",
"title": "Deplatforming: pas un problème de premier amendement, mais toujours un appel difficile pour les grandes technologies",
"date": "2021-01-26T17: 00: 00-05: 00"
}
{
"id": "960679189",
"titre": "Mike Lindell, PDG de My Pillow, suspendu définitivement de Twitter",
"date": "2021-01-26T10: 17: 15-05: 00"
}
{
"id": "960220477",
"title": "Votre 401 k est-il complice pour rendre les céréales plus chères?",
"date": "2021-01-26T06: 31: 24-05: 00"
}
Comment traiter JSON en ligne à l'aide de jqplay
Si vous voulez essayer jq avant de le télécharger, jqplay est l'endroit idéal pour commencer. Via une interface simple, le site vous permet de saisir un exemple de JSON et un filtre, puis d'afficher le résultat.
Cela vous permet également d'essayer plusieurs options différentes. Celles-ci incluent - sortie compacte pour supprimer les espaces et - entrée nulle pour afficher le résultat sur une entrée manquante.
L'interface comprend également une section de feuille de triche très utile. Voici une capture d'écran de le long exemple précédent :
Notez que, comme pour ce lien, vous pouvez également partager des exemples via une URL.
Utilisez jq pour lire et manipuler les données JSON
Vous pouvez trouver des informations complètes sur jq dans le tutoriel et le manuel, tous deux disponibles sur le site Web de jq. Le programme lui-même offre une aide limitée via le - aide option.
Si vous souhaitez effectuer des filtres et des transformations de base ou lire une grande partie de JSON, jq est un outil précieux.
À propos de l'auteur