3647 Stimmen

Wie kann ich JSON in einem Shell-Skript hübsch ausdrucken?

Gibt es ein (Unix-)Shell-Skript zur Formatierung von JSON in menschenlesbarer Form?

Im Grunde genommen möchte ich, dass es das Folgende umwandelt:

{ "foo": "lorem", "bar": "ipsum" }

... zu etwas wie diesem:

{
    "foo": "lorem",
    "bar": "ipsum"
}

0 Stimmen

10 Stimmen

Ich habe vor einiger Zeit meine eigenen gedreht: github.com/exhuma/braindump/tree/master/jsonformat Der Code ist sehr einfach und verwendet Python's eigene json Bibliothek, aber ich habe auch pygments hinzugefügt, um eine Syntaxhervorhebung zu erhalten.

0 Stimmen

Ich bin über diese Seite gestolpert und habe dann Folgendes gefunden Json Hübsch und ich mag es sehr. Typekit verwendet es in ihren API-Beispielen, so gibt es einige klout hinter ihm ^^

17voto

Rafiek Punkte 1260

Wenn Sie node auf Ihrem System installiert haben, funktioniert Folgendes.

echo '{"test":1,"test2":2}' | npx json

{
  "test": 1,
  "test2": 2
}

16voto

  1. brew install jq
  2. command + | jq
  3. (Beispiel: curl localhost:5000/blocks | jq )
  4. Viel Spaß!

enter image description here

13voto

fangxing Punkte 4754

Verwenden Sie Ruby in einer Zeile:

echo '{"test":1,"test2":2}' | ruby -e "require 'json'; puts JSON.pretty_generate(JSON.parse(STDIN.read))"

Und Sie können einen Alias dafür festlegen:

alias to_j="ruby -e \"require 'json';puts JSON.pretty_generate(JSON.parse(STDIN.read))\""

Dann können Sie es bequemer nutzen

echo '{"test":1,"test2":2}' | to_j

{
  "test": 1,
  "test2": 2
}

Und wenn Sie JSON mit Farbe anzeigen möchten, können Sie die awesome_print ,

gem install awesome_print

dann

alias to_j="ruby -e \"require 'json';require 'awesome_print';ap JSON.parse(STDIN.read)\""

Versuchen Sie es!

echo '{"test":1,"test2":2, "arr":["aa","bb","cc"] }' | to_j

Enter image description here

13voto

harish2704 Punkte 571

Eine einzeilige Lösung mit Node.js sieht wie folgt aus:

$ node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))"

Zum Beispiel:

$ cat test.json | node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))"

0 Stimmen

Keine Ausgabe für mich mit diesem Beispiel, obwohl ich dies vor langer Zeit gewählt habe. Etwas hat sich geändert ...

1 Stimmen

@MatthisKohli: Ich habe das gerade noch einmal mit Node V12.x überprüft und es funktioniert. Es ist nichts Magisches in diesem Code. fs.readFileSync(0) liest stdin des laufenden Prozesses und JSON.stringify formatiert das JSON. Es besteht also eine sehr geringe Chance, die API zu ändern.

10voto

Hier ist eine Ruby-Lösung, die besser ist als der prettify-Befehl von Json. Der Edelstein colorful_json ist ziemlich gut.

gem install colorful_json
echo '{"foo": "lorem", "bar": "ipsum"}' | cjson
{
  "foo": "lorem",
  "bar": "ipsum"
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X