GNU/Linux >> Tutoriels Linux >  >> Linux

Comment analyser et joliment imprimer JSON avec les outils de ligne de commande Linux

JSON est un format de stockage de données léger et indépendant du langage, facile à intégrer à la plupart des langages de programmation et également facile à comprendre par les humains, bien sûr lorsqu'il est correctement formaté. Le mot JSON signifie J avaS écriture O objet N otation, bien qu'il commence par JavaScript, et principalement utilisé pour échanger des données entre le serveur et le navigateur, mais maintenant utilisé dans de nombreux domaines, y compris les systèmes embarqués. Ici, nous allons analyser et joliment imprimer JSON avec des outils de ligne de commande sous Linux. C'est extrêmement utile pour gérer des données JSON volumineuses dans un script shell ou pour manipuler des données JSON dans un script shell.

Qu'est-ce qu'une jolie impression ?

Les données JSON sont structurées pour être un peu plus lisibles par l'homme. Cependant, dans la plupart des cas, les données JSON sont stockées sur une seule ligne, même sans caractère de fin de ligne.

Évidemment, ce n'est pas très pratique pour lire et éditer manuellement.

C'est alors que la jolie impression est utile. Le nom est assez explicite, reformant le texte JSON pour être plus lisible par les humains. Ceci est connu sous le nom de JSON jolie impression .

Analyser et joli imprimer JSON en utilisant jq sous Linux

Les données JSON pourraient être analysées avec des traitements de texte en ligne de commande comme awk , sed et gerp . En fait, JSON.awk est un script awk pour le faire. Cependant, il existe des outils dédiés dans le même but.

  1. jq ou jshon , analyseur JSON pour shell, les deux sont très utiles.
  2. Scripts shell tels que JSON.sh ou jsonv.sh pour analyser JSON dans bash, zsh ou dash shell.
  3. JSON.awk , Script awk de l'analyseur JSON.
  4. Modules Python comme json.tool .
  5. trait de soulignement-cli , basé sur Node.js et javascript.

Dans ce tutoriel, je me concentre uniquement sur jq , qui est un analyseur JSON assez puissant pour les shells avec une capacité de filtrage et de script avancée.

Jolie impression JSON

Les données JSON pourraient être en un et presque illisibles pour les humains, donc pour les rendre un peu lisibles, la jolie impression JSON est ici.

Exemple : Une donnée de jsonip.com , pour obtenir une adresse IP externe au format JSON, utilisez curl ou wget des outils comme ci-dessous.

$ wget -cq http://jsonip.com/ -O -

Les données réelles ressemblent à ceci :

{"ip":"111.222.333.444","about":"/about","Pro!":"http://getjsonip.com"}

Maintenant, imprimez-le avec jq :

$ wget -cq http://jsonip.com/ -O - | jq '.'

Cela devrait ressembler à ci-dessous, après avoir filtré le résultat avec jq.

{

   "ip": "111.222.333.444",

   "about": "/about",

   "Pro!": "http://getjsonip.com"

}

La même chose pourrait être faite avec python json.tool module. Voici un exemple :

$ cat anything.json | python -m json.tool

Cette solution basée sur Python devrait convenir à la plupart des utilisateurs, mais elle n'est pas très utile lorsque Python n'est pas préinstallé ou ne peut pas être installé, comme sur les systèmes embarqués.

Cependant, le module python json.tool a un avantage distinct, il est multiplateforme. Ainsi, vous pouvez l'utiliser de manière transparente sur Windows, Linux ou mac OS.

Suggestion de lecture :

  • Prettyping - Rendre la sortie de la commande Ping plus jolie et plus facile à lire

Comment analyser JSON avec jq

Tout d'abord, vous devez installer jq, il est déjà pris en charge par la plupart des distributions GNU/Linux, installez-le avec leurs commandes d'installation de paquet respectives.

Sur Arch Linux :

$ sudo pacman -S jq

Sur Debian, Ubuntu, Linux Mint :

$ sudo apt-get install jq

Sur Fedora :

$ sudo dnf install jq

Sur openSUSE :

$ sudo zypper install jq

Pour les autres systèmes d'exploitation ou plates-formes, consultez les instructions d'installation officielles.

Filtres de base et identifiants de jq

jq pourrait lire les données JSON depuis stdin ou un fichier . Vous devez utiliser les deux selon la situation.

Le symbole unique de . est le filtre le plus basique. Ces filtres sont également appelés object identifier-index . Utiliser un seul . avec jq, joli imprime le fichier JSON d'entrée.

Citations simples - Vous n'êtes pas obligé d'utiliser toujours le guillemet simple. Mais si vous combinez plusieurs filtres sur une seule ligne, vous devez les utiliser.

Citations doubles - Vous devez joindre n'importe quel caractère spécial comme @ , # , $ entre deux guillemets doubles, comme dans cet exemple, jq .foo."@bar"

Impression de données brutes - Pour une raison quelconque, si vous n'avez besoin que des données analysées finales, non entre guillemets doubles, utilisez le drapeau -r avec la commande jq, comme ceci. - jq -r .foo.bar .

Analyse de données spécifiques

Pour filtrer une partie spécifique de JSON, vous devez examiner la hiérarchie des données du joli fichier JSON imprimé.

Un exemple de données JSON, de Wikipédia :

{

  "firstName": "John",

  "lastName": "Smith",

  "age": 25,

  "address": {

    "streetAddress": "21 2nd Street",

    "city": "New York",

    "state": "NY",

    "postalCode": "10021"

},

  "phoneNumber": [

{

  "type": "home",

  "number": "212 555-1234"

},

{

  "type": "fax",

  "number": "646 555-4567"

}

],

  "gender": {

  "type": "male"

  }

}

Je vais utiliser ces données JSON comme exemple dans ce tutoriel, enregistrées sous le nom sample.json .

Disons que je veux filtrer l'adresse du fichier sample.json. La commande devrait donc ressembler à :

$ jq .address sample.json

Exemple de résultat :

{

  "streetAddress": "21 2nd Street",

  "city": "New York",

  "state": "NY",

  "postalCode": "10021"

}

Encore une fois disons que je veux le code postal, alors je dois ajouter un autre object identifier-index , c'est-à-dire un autre filtre.

$ cat sample.json | jq .address.postalCode

Notez également que les filtres sont sensibles à la casse et vous devez utiliser exactement la même chaîne pour obtenir une sortie significative au lieu de null.

Analyse des éléments du tableau JSON

Les éléments du tableau JSON sont entre crochets, sans aucun doute assez polyvalents à utiliser.

Pour analyser les éléments d'un tableau, vous devez utiliser l'[]identifiant ainsi que d'autres index d'identificateurs d'objets.

Dans cet exemple de données JSON, les numéros de téléphone sont stockés dans un tableau. Pour obtenir tout le contenu de ce tableau, vous devez utiliser uniquement les crochets, comme dans cet exemple.

$ jq .phoneNumber[] sample.json

Disons que vous voulez juste le premier élément du tableau, puis utilisez les numéros d'objet du tableau commençant par 0, pour le premier élément, utilisez [0] , pour les éléments suivants, il doit être incrémenté d'une unité à chaque étape.

$ jq .phoneNumber[0] sample.json

Exemples de script

Disons que je veux seulement le nombre pour la maison, pas les données entières du tableau JSON. Voici quand le script dans la commande jq devient pratique.

$ cat sample.json | jq -r '.phoneNumber[] | select(.type == "home") | .number'

Ici, je dirige d'abord les résultats d'un filer vers un autre, puis j'utilise l'attribut select pour sélectionner un type particulier de données, en redirigeant à nouveau le résultat vers un autre filtre.

Expliquer chaque type de filtres et de scripts jq dépasse la portée et l'objectif de ce didacticiel. Il est fortement suggéré de lire le manuel JQ pour une meilleure compréhension ci-dessous.


Linux
  1. Comment programmer avec Bash :syntaxe et outils

  2. Comment trouver des fichiers avec des autorisations SUID et SGID sous Linux

  3. Flatpak sur Linux :qu'est-ce que c'est et comment installer des applications avec ?

  4. Comment compresser des fichiers et des répertoires sous Linux (avec exemples)

  5. Comment imprimer un fichier JSON dans un terminal Linux

Comment comparer les commandes et les programmes Linux à partir de la ligne de commande

Comment partager en toute sécurité des fichiers à partir de la ligne de commande avec ffsend sous Linux

Comment afficher l'utilisation du disque avec Duf sous Linux et Unix

Comment sauvegarder et restaurer le système Linux avec Timeshift

Comment travailler avec le processus de premier plan et d'arrière-plan sous Linux

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux