FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Transformez JSON et rendez-le lisible avec jq

JavaScript Object Notation (JSON) est l'un des formats de données les plus populaires au monde. Il bénéficie d'un large support et d'une spécification simple. Il est facile à utiliser dans 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 texte lisible par l'homme, un jeu 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.

javaLe jq permet aux utilisateurs de formater, filtrer et transformer des données JSON.

Qu'est-ce que jq ?

Puisqu'il s'agit d'un outil de ligne de commande, 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 couvrons plus en détail ci-dessous.

Le fonctionnement normal tourne autour des filtres et de l'application d'un filtre à certains JSON d'entrée. Vous pouvez utiliser jq pour extraire un seul élément d'un ensemble de plusieurs. Ou vous pouvez 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 la page d'accueil de jq. Une fois que vous avez téléchargé le programme, 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 depuis la ligne de commande sans arguments :

$ ./jq 

Vous devriez voir des informations générales sur l'utilisation, en commençant par un simple résumé d'une ligne comme celui-ci :

jq - processeur JSON en ligne de commande [version 1.6] 

Si vous avez du mal 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 le bac à sable en ligne en attendant.

Utilisation de base de jq

L'utilisation standard est :

jq [options]  [fichier...] 

Ainsi, par exemple :

$ jq '.' data.json 

Vous pouvez également diriger l'entrée via une autre commande comme ceci :

$ echo '{"name":"john"}' | jq '.' 
{
"nom":"Jean"
}

Ceci est particulièrement utile lorsque, par exemple, la première commande ressemble à un appel à curl qui peut récupérer des données JSON à partir d'un service Web.

Le filtre présenté dans ces exemples est le plus simple possible, . (un point) , qui imprime l'entrée sous une forme embellie. 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 à l'aide de 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 '{"name":"john"}' | jq '.nom' 
"Jean"

Cela peut s'enchaîner pour accéder à des structures profondément imbriquées :

$ echo '{"name":{"first":"john","last":"smith"}}' | jq '.nom.nom' 
"forgeron"

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

Il s'agit d'une méthode importante pour enchaîner les filtres, que nous montrerons plus tard.

Plus de fonctionnalités avancées

Vous ne pouvez acquérir une compréhension complète de la puissance de jq qu'en lisant le manuel de jq. En fait, la prise en charge par jq des opérateurs, des variables et même des fonctions définies par l'utilisateur lui permet d'agir comme n'importe quel langage de programmation.

Ces fonctionnalités rendent possible une utilisation avancée, quoique compliquée. Mais jq possède certaines 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 à la fois dans le add et longueur fonctions, en divisant les résultats. En fonctionnement, il calcule la moyenne d'un tableau de nombres.

L'opérateur de division peut également agir sur les chaînes pour les séparer en fonction d'un séparateur :

$ echo '"Je teste juste"' | jq'. / " "' 
[
"Juste",
"essai"
]

Le sélectionner la fonction filtre un tableau, en ne gardant que les éléments qui passent une contrainte donnée :

$ echo '[2,4,8]' | jq '.[] | sélectionnez(.>=3)' 
4
8

Notez qu'il s'agit également d'un exemple de l'opérateur pipe de jq (| ) qui ressemble à un tuyau d'obus. Il alimente le résultat de son filtre de gauche comme entrée de son filtre de droite.

La carte La fonction est très utile lorsque vous travaillez avec des tableaux. Il 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 'carte(.+1)' 
[
2,
3,
4
]

Vous l'utiliserez souvent en conjonction avec select, par exemple

$ echo '[2,4,8]' | jq 'map(select(.>=3))' 
[
4,
8
]

Tout mettre ensemble :un exemple pratique de jq

Étant donné que jq traite tout JSON valide qui lui est acheminé, vous pouvez lui envoyer la sortie de la curl commander. Cela vous permet de récupérer JSON à partir d'une URL et de le traiter immédiatement sur la ligne de commande :

JSON Feed est une alternative JSON aux formats RSS et Atom. Le site NPR est un exemple qui prend en charge le flux JSON, mais il est difficile à visualiser à partir de la source et contient beaucoup de données :

Transformez JSON et rendez-le lisible avec jq

Tout de suite, vous pouvez voir à quel point il est plus facile de lire en récupérant ces données et en les transmettant via jq :

$ curl -s https://feeds.npr.org/1019/feed.json | jq '.' 
Transformez JSON et rendez-le lisible avec jq

Voici un exemple plus complet de filtre qui récupère l'identifiant, le titre et la date de chaque article que le site a publié un mardi.

$ curl -s https://feeds.npr.org/1019/feed.json | 
jq '.items | .[] |
sélectionner(
.date_published |
.[0:19] + "Z" |
de date |
strftime("%a") =="Mar"
) |
{id :.id, titre :.titre, date :.date_published}'

Après avoir sélectionné les éléments propriété, ce filtre utilise .[] itérer sur chaque élément. La majeure partie du filtre utilise le select fonction pour ne conserver que les messages avec une date_published valeur dont le jour de la semaine (strftime("%a") ) est Mar . Le strftime la fonction nécessite une date au format très spécifique que le filtre .[0:19] + "Z" constructions.

Après avoir sélectionné les éléments souhaités, le filtre final construit un objet pour chacun avec les champs requis. Notez qu'à chaque changement de flux, les résultats seront différents. Voici un exemple pris au moment de la publication :

{ 
"id":"959667930",
"title":"Déplateforme :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",
"title":"Le PDG de My Pillow, Mike Lindell, définitivement suspendu 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"
}

Voir aussi : Analyse JSON Python :un guide simple

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 de visualiser le résultat.

Cela vous permet également d'essayer différentes options. Ceux-ci incluent --compact-output (pour supprimer les espaces) et --null-input (pour afficher le résultat en cas d'entrée manquante).

L'interface comprend également une section de feuille de triche très utile. Voici une capture d'écran de l'exemple long précédent :

Transformez JSON et rendez-le lisible avec jq

Notez que, comme pour ce lien, vous pouvez également partager des exemples via une URL.

Utiliser jq pour lire et manipuler des données JSON

Vous pouvez trouver des informations complètes sur jq dans le didacticiel et le manuel, tous deux disponibles sur le site Web de jq. Le programme lui-même offre une aide limitée via le --help 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.


[]