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 ^^

10voto

Hank Gay Punkte 67607

yajl ist meiner Erfahrung nach sehr schön. Ich benutze seine json_reformat Befehl zum Pretty-Printing .json Dateien in vim durch Einfügen der folgenden Zeile in mein .vimrc :

autocmd FileType json setlocal equalprg=json_reformat

9voto

Ulysse BN Punkte 8260

TL;DR Für Aufführungen, verwenden Sie jj -p < my.json .

Benchmark

Ich habe hier einige Lösungen genommen und sie mit dem nächsten Dummy-Skript verglichen:

function bench {
    time (
      for i in {1..1000}; do
        echo '{ "foo" : { "bar": { "dolorem" : "ipsum", "quia" : { "dolor" : "sit"} } } }' \
        | $@ > /dev/null
      done
    )
}

Hier ist das Ergebnis auf meinem Mac (32 GB, Apple M1 Max, YMMV):

bench python -m json.tool
# 8.39s user 12.31s system 42% cpu 48.536 total
bench jq
# 13.12s user 1.28s system 87% cpu 16.535 total
bench bat -p -l json # NOTE: only syntax colorisation.
# 1.87s user 1.47s system 66% cpu 5.024 total
bench jj -p
# 1.94s user 2.44s system 57% cpu 7.591 total
bench xidel -s - -e '$json' --printed-json-format=pretty                      
# 4.32s user 1.89s system 76% cpu 8.101 total

Danke @peak und Ihre Antwort für diese Entdeckung von jj!

0 Stimmen

Großartig, aber es wäre noch schöner, wenn es eine komplexere und längere JSON-Testzeichenfolge wäre.

1 Stimmen

@HiltonFernandes können Sie gerne bearbeiten :)

0 Stimmen

Lieber @Ulysse BN, wenn ich die JSON-Zeichenfolge komplexer gestalte, würden Sie dann bitte versuchen, Ihren Benchmark erneut auszuführen? Leider habe ich hier keinen Mac (8 GB 2133 MHz LPDDR3, 2,3 GHz Intel Core i5) zur Hand.

9voto

svidgen Punkte 13477

Die PHP-Version, wenn Sie PHP >= 5.4 haben.

alias prettify_json=php -E '$o = json_decode($argn); print json_encode($o, JSON_PRETTY_PRINT);'
echo '{"a":1,"b":2}' | prettify_json

3 Stimmen

Ein Einzeiler: echo '{"a":1,"b":2}' | php -r 'echo json_encode(json_decode(fgets(STDIN)), JSON_PRETTY_PRINT)."\n";'

1 Stimmen

Mehrzeilenfähig: printf '{\n"a":1,\n"b":2\n}' | php -r 'echo json_encode(json_decode(file_get_contents("php://stdin")), JSON_PRETTY_PRINT) . PHP_EOL;'

8voto

pimlottc Punkte 2886

Die Lösungen von J.F. Sebastian haben bei mir unter Ubuntu 8.04 nicht funktioniert.
Hier ist eine modifizierte Perl-Version, die mit der älteren 1.X JSON-Bibliothek funktioniert:

perl -0007 -MJSON -ne 'print objToJson(jsonToObj($_, {allow_nonref=>1}), {pretty=>1}), "\n";'

8voto

Robert Gould Punkte 66858

Es gibt TidyJSON .

Es ist C#, also können Sie es vielleicht kompilieren mit Mono und arbeiten unter *nix. Allerdings gibt es keine Garantien, tut mir leid.

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