web-dev-qa-db-fra.com

Comment puis-je imprimer un fichier JSON à partir de la ligne de commande?

J'ai un fichier avec une séquence d'éléments JSON:

{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }

Existe-t-il un script Shell pour formater JSON afin d’afficher le contenu du fichier sous une forme lisible? 

J'ai vu ceci post et je pense que c'est un bon point de départ!

Mon idée est d’itérer des lignes dans le fichier puis: 

while read row; do echo ${row} | python -mjson.tool; done < "file_name"

Quelqu'un a-t-il d'autres idées?

45
Luca Davanzo

Transférez les résultats du fichier dans l'outil python json 2.6 et ultérieur

cat 'file_name' | python -m json.tool
85
Shawn Vader

Vous pouvez utiliser l'outil JSON Python (requiert Python 2.6+).

Par exemple:

echo '{ "element0" : "lorem", "element1" : "ipsum" }' | python -m json.tool

Ce qui vous donnera:

{
    "element0": "lorem",
    "element1": "ipsum"
}
45
Nimrod007

jq - un processeur JSON de ligne de commande léger et flexible

J'ai senti que cela méritait sa propre entrée quand cela m'a pris plus de temps qu'il aurait dû le découvrir. Je cherchais un moyen simple d’imprimer joliment la sortie json de docker inspect -f. Noufal Ibrahim en a parlé brièvement ci-dessus dans le cadre d'une autre réponse. 

Sur le site Web de jq ( https://stedolan.github.io/jq/ ):

jq est comme sed pour les données JSON - vous pouvez l'utiliser pour découper, filtrer, mapper et transformer des données structurées avec la même facilité que celle que sed, awk, grep et vos amis vous permettent de jouer avec du texte.

Il fournit une sortie colorée par défaut et il vous suffit de raccorder à jq

Exemple:

Sortie "Raw" json vs identique à jq

34
Fonebone

Sortie colorée à l'aide de Pygmentize + Python json.tool

Pygmentize est un outil tueur. Regarde ça. Je combine python json.tool avec pygmentize

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

Pour d'autres outils similaires et les instructions d'installation, voir la réponse ci-dessus.

Voici une démo en direct:

 demo

11
Shubham Chaudhary

Il y en a beaucoup. J'ai personnellement cet alias dans mon .zshrc

pjson () {
        ~/bin/pjson.py | less -X
}

pjson.py est 

#!/usr/bin/env python

import json
import sys

try:
    input_str = sys.stdin.read()
    print json.dumps(json.loads(input_str), sort_keys = True, indent = 2)
except ValueError,e:
    print "Couldn't decode \n %s \n Error : %s"%(input_str, str(e))

Cela me permet d’utiliser cela dans une ligne de commande comme un tuyau (quelque chose comme curl http://.... | pjson).

OTOH, le code personnalisé est un passif, donc il y a jq , qui pour moi ressemble à l'étalon-or. Il est écrit en C (et est donc portable sans dépendances comme Python ou Node), fait beaucoup plus que simplement imprimer et est rapide.

5
Noufal Ibrahim

Vous pouvez utiliser le paquetage jq qui peut être installé sur tous les systèmes Linux. Installez l'outil à l'aide des commandes ci-dessous.

# Redhat based systems(Centos)
yum install -y epel-release
yum install -y jq

# Debian based systems
apt install -y jq

Vous pourrez ensuite diriger des flux de texte vers l’outil jq.

echo '{"test":"value", "test2":"value2"}' | jq

J'espère que cette réponse vous aidera.

2
srimaln91

Sous Mac OS, installez jq avec la commande 

$ brew install jq

Vous pouvez obtenir la jolie impression JSON de la même manière que,

$ curl -X GET http://localhost:8080/api/v1/appointments/1  | jq


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   117    0   117    0     0   8404      0 --:--:-- --:--:-- --:--:--  9000
{
  "craeted_at": "10:24:38",
  "appointment_date": "2019-02-08",
  "name_of_doctor": "Monika",
  "status": true,
  "price": 12.5,
  "id": 1
}
1
Arefe

La solution de Shawn mais pour Python 3:

echo '{"foo": "bar"}' | python3 -m json.tool
1
Dave