it-swarm.com.de

Wie kann ich eine JSON-Datei über die Befehlszeile ausgeben?

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?

45
Luca Davanzo

Leiten Sie die Ergebnisse aus der Datei in das Python-Json-Tool 2.6

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

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"
}
45
Nimrod007

jq - ein leichter und flexibler Befehlszeilen-JSON-Prozessor

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:

"Raw" -Json-Ausgabe vs das gleiche an jq geleitet

34
Fonebone

Farbige Ausgabe mit Pygementize + Python json.tool

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:

 demo

11

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.

5
Noufal Ibrahim

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.

2
srimaln91

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
}
1
Arefe

Shawns Lösung, aber für Python 3:

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