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?
Transférez les résultats du fichier dans l'outil python json 2.6 et ultérieur
cat 'file_name' | python -m json.tool
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"
}
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:
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:
Il y en a beaucoup. J'ai personnellement cet alias dans mon .zshrc
pjson () {
~/bin/pjson.py | less -X
}
où 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.
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.
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
}
La solution de Shawn mais pour Python 3:
echo '{"foo": "bar"}' | python3 -m json.tool