Ich habe eine Datei mit einer Folge von JSON-Elementen:
{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }
Gibt es ein Shell-Skript zum Formatieren von JSON, um den Dateiinhalt in lesbarer Form anzuzeigen?
Ich habe this post gesehen, und ich denke, das ist ein guter Ausgangspunkt!
Meine Idee ist, Zeilen in der Datei zu iterieren und dann:
while read row; do echo ${row} | python -mjson.tool; done < "file_name"
Hat jemand noch andere Ideen?
Leiten Sie die Ergebnisse aus der Datei in das Python-Json-Tool 2.6
cat 'file_name' | python -m json.tool
Sie können Python JSON-Tool verwenden (erfordert Python 2.6 und höher).
Zum Beispiel:
echo '{ "element0" : "lorem", "element1" : "ipsum" }' | python -m json.tool
Was wird dir geben:
{
"element0": "lorem",
"element1": "ipsum"
}
Ich hatte das Gefühl, dass dies seinen eigenen Beitrag verdient hatte, als ich länger brauchte, als ich entdecken müsste. Ich suchte nach einer einfachen Möglichkeit, die Json-Ausgabe von docker inspect -f
zu drucken. Es wurde oben von Noufal Ibrahim als Teil einer anderen Antwort kurz erwähnt.
Von der jq-Website ( https://stedolan.github.io/jq/ ):
jq ist wie sed für JSON-Daten - Sie können damit strukturierte Daten mit der gleichen Leichtigkeit schneiden und filtern, kartieren und transformieren. Mit sed, awk, grep und Freunden können Sie mit Text spielen.
Es bietet standardmäßig eine farbige Ausgabe, und Sie müssen lediglich an jq
weiterleiten.
Beispiel:
Pygementize ist ein Killer-Tool. Sieh dir das an. Ich kombiniere python json.tool mit pygementize
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
Weitere ähnliche Tools und Installationsanweisungen finden Sie in der oben verlinkten Antwort.
Hier ist eine Live-Demo:
Es gibt eine Reihe von ihnen. Ich persönlich habe diesen Alias in meinem .zshrc
pjson () {
~/bin/pjson.py | less -X
}
wo pjson.py
ist
#!/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))
Erlaubt mir, dies in einer Befehlszeile als Pipe zu verwenden (etwa curl http://.... | pjson
).
OTOH, Custom Code ist eine Verpflichtung, also gibt es jq , was für mich wie der Goldstandard aussieht. Es ist in C geschrieben (und ist daher portabel ohne Abhängigkeiten wie Python oder Node), kann viel mehr als nur hübsch drucken und ist schnell.
Sie können das Paket jq
verwenden, das auf allen Linux-Systemen installiert werden kann. Installieren Sie das Tool mit den folgenden Befehlen.
# Redhat based systems(Centos)
yum install -y epel-release
yum install -y jq
# Debian based systems
apt install -y jq
Dann können Sie Textströme an das Tool jq weiterleiten.
echo '{"test":"value", "test2":"value2"}' | jq
Hoffe, diese Antwort wird helfen.
Installieren Sie unter Mac OS jq
mit dem Befehl
$ brew install jq
Sie können den hübschen Druck-JSON so ähnlich erhalten wie:
$ 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
}
Shawns Lösung, aber für Python 3:
echo '{"foo": "bar"}' | python3 -m json.tool