react - show pretty json in html




Wie kann ich JSON in einem Shellskript hübsch drucken? (20)

Pygementize

Ich kombiniere Pythons json.tool mit pygementize:

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

Es gibt einige Alternativen zu pygementize, die in meiner Antwort aufgeführt sind .

Hier ist eine Live-Demo:

https://code.i-harness.com

Gibt es ein (Unix) Shell-Skript zum Formatieren von JSON in für Menschen lesbarer Form?

Grundsätzlich möchte ich, dass es Folgendes umwandelt:

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

... in so etwas:

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

Vanilla Bash

Ein einfaches Bash-Skript ( grep / awk ) für hübschen JSON-Druck ohne Installation durch Dritte:

json_pretty.sh

#/bin/bash

grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'

Beispiele:

1) Lesen Sie die Datei und drucken Sie sie in der Konsole aus

cat file.json | json_pretty.sh

2) Verwenden Sie mit Windows GIT Bash von Datei zu Datei (UTF8-basiert):

cat fileIn.json |sh.exe json_pretty.sh > fileOut.json

Auf * nix funktioniert das Lesen von stdin und schreiben in stdout besser:

#!/usr/bin/env python
"""
Convert JSON data to human-readable form.

(Reads from stdin and writes to stdout)
"""

import sys
try:
    import simplejson as json
except:
    import json

print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)

Schreibe dies in eine Datei (ich habe nach AnC Antwort "prettyJSON" genannt) in PATH und chmod +x , und du kannst AnC .


Dank der hilfreichen Hinweise von JF Sebastian, hier ein leicht verbessertes Skript, das ich mir ausgedacht habe:

#!/usr/bin/python

"""
Convert JSON data to human-readable form.

Usage:
  prettyJSON.py inputFile [outputFile]
"""

import sys
import simplejson as json


def main(args):
    try:
        if args[1] == '-':
            inputFile = sys.stdin
        else:
            inputFile = open(args[1])
        input = json.load(inputFile)
        inputFile.close()
    except IndexError:
        usage()
        return False
    if len(args) < 3:
        print json.dumps(input, sort_keys = False, indent = 4)
    else:
        outputFile = open(args[2], "w")
        json.dump(input, outputFile, sort_keys = False, indent = 4)
        outputFile.close()
    return True


def usage():
    print __doc__


if __name__ == "__main__":
    sys.exit(not main(sys.argv))

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

Es ist nicht zu einfach, auf eine native Weise mit den jq-Tools .

Zum Beispiel:

cat xxx | jq .

Ich empfehle die Verwendung des Befehlszeilen-Dienstprogramms json_xs, das im Perl-Modul JSON :: XS enthalten ist. JSON :: XS ist ein Perl-Modul zum Serialisieren / Deserialisieren von JSON. Auf einem Debian- oder Ubuntu-Computer können Sie es folgendermaßen installieren:

sudo apt-get install libjson-xs-perl

Es ist offensichtlich auch auf CPAN verfügbar.

Um es zu verwenden, um JSON zu formatieren, das von einer URL abgerufen wird, können Sie curl oder wget folgendermaßen verwenden:

$ curl -s http://page.that.serves.json.com/json/ | json_xs

oder dieses:

$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs

Um JSON in einer Datei zu formatieren, können Sie Folgendes tun:

$ json_xs < file-full-of.json

Um es als YAML zu formatieren, was manche Leute für menschlicher lesbar halten als JSON:

$ json_xs -t yaml < file-full-of.json

Ich habe ein Tool geschrieben, das eines der besten verfügbaren "intelligenten Whitespace" -Formate hat. Es erzeugt eine lesbarere und weniger ausführliche Ausgabe als die meisten anderen Optionen hier.

underscore-cli

So sieht "Smart Whitespace" aus:

Ich bin zwar ein bisschen voreingenommen, aber es ist ein großartiges Werkzeug zum Drucken und Bearbeiten von JSON-Daten über die Befehlszeile. Es ist sehr benutzerfreundlich und verfügt über eine ausführliche Befehlszeile / Dokumentation. Es ist ein Schweizer Taschenmesser, das ich für 1001 verschiedene kleine Aufgaben verwende, die auf andere Weise überraschend ärgerlich wären.

Neuester Anwendungsfall: Chrome, Dev-Konsole, Registerkarte "Netzwerk", alle als HAR-Datei exportieren, "cat site.har | Unterstrich auswählen" .url "--outfmt text | grep mydomain"; Jetzt habe ich eine chronologisch geordnete Liste aller URL-Abrufe, die während des Ladens der Website meines Unternehmens gemacht wurden.

Hübsches Drucken ist einfach:

underscore -i data.json print

Gleiche Sache:

cat data.json | underscore print

Gleiches, expliziter:

cat data.json | underscore print --outfmt pretty

Dieses Tool ist mein aktuelles Passionsprojekt. Wenn Sie also Funktionswünsche haben, besteht eine gute Chance, dass ich sie ansprechen werde.


Ich verwende jshon , um genau das zu tun, was Sie beschreiben. Renn einfach:

echo $COMPACTED_JSON_TEXT | jshon

Sie können auch Argumente übergeben, um die JSON-Daten umzuwandeln.


Ich verwende httpie

$ pip install httpie

Und du kannst es so benutzen

 $ http PUT localhost:8001/api/v1/ports/my 
 HTTP/1.1 200 OK
 Connection: keep-alive
 Content-Length: 93
 Content-Type: application/json
 Date: Fri, 06 Mar 2015 02:46:41 GMT
 Server: nginx/1.4.6 (Ubuntu)
 X-Powered-By: HHVM/3.5.1

 {
     "data": [], 
     "message": "Failed to manage ports in 'my'. Request body is empty", 
     "success": false
 }

Mit Python 2.6+ können Sie einfach Folgendes tun:

echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool

Wenn sich der JSON in einer Datei befindet, können Sie Folgendes tun:

python -m json.tool my_json.json

Wenn der JSON von einer Internetquelle wie einer API stammt, können Sie verwenden

curl http://my_url/ | python -m json.tool

In allen diesen Fällen können Sie einen Alias ​​verwenden:

alias prettyjson='python -m json.tool'

Für noch mehr Komfort mit etwas mehr Tippen, um es vorzubereiten:

prettyjson_s() {
    echo "$1" | python -m json.tool
}

prettyjson_f() {
    python -m json.tool "$1"
}

prettyjson_w() {
    curl "$1" | python -m json.tool
}

für alle oben genannten Fälle. Sie können dies in .bashrc und es wird jedes Mal in der Shell verfügbar sein. prettyjson_s '{"foo": "lorem", "bar": "ipsum"}' es wie prettyjson_s '{"foo": "lorem", "bar": "ipsum"}' .


Oder mit Ruby:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

Sie können verwenden: jq

Es ist sehr einfach zu bedienen und funktioniert super! Es kann sehr große JSON-Strukturen einschließlich Streams verarbeiten. Die Tutorials finden Sie here .

Hier ist ein Beispiel:

$ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

Oder mit anderen Worten:

$ echo '{ "foo": "lorem", "bar": "ipsum" }' | jq .
{
  "bar": "ipsum",
  "foo": "lorem"
}

So mach ich es:

gem install jazor
jazor --help

Es verkürzt den Code und erledigt die Arbeit.


Verwenden Sie mit Perl das CPAN-Modul JSON::XS . Es installiert ein Befehlszeilentool json_xs .

Bestätigen:

json_xs -t null < myfile.json

Vervollständigen Sie die JSON-Datei src.json mit pretty.json :

< src.json json_xs > pretty.json

Wenn Sie json_xs nicht haben, versuchen Sie es mit json_pp . "pp" steht für "pure perl" - das Tool ist nur in Perl implementiert, ohne an eine externe C-Bibliothek gebunden zu sein (wofür XS steht, Perls "Extension System").


Wenn Sie mit Perl JSON::PP von CPAN installieren, erhalten Sie den Befehl json_pp . Wenn Sie das example von B Bycroft stehlen, erhalten Sie:

[[email protected] ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

Es ist erwähnenswert, dass json_pp mit Ubuntu 12.04 (mindestens) und Debian in /usr/bin/json_pp


JSONLint verfügt über eine Open-Source-Implementierung. Github kann in der Befehlszeile oder in einem Projekt "node.js" verwendet werden.

npm install jsonlint -g

und dann

jsonlint -p myfile.json

oder

curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less

yajl ist meiner Erfahrung nach sehr nett. Ich benutze den Befehl json_reformat , um .json Dateien in vim drucken, indem Sie die folgende Zeile in mein .vimrc :

autocmd FileType json setlocal equalprg=json_reformat

jq . einfach die Ausgabe an jq . .

Beispiel:

twurl -H ads-api.twitter.com '.......' | jq .

UPDATE Ich verwende jq jetzt wie in einer anderen Antwort vorgeschlagen. Es ist extrem leistungsfähig beim Filtern von JSON, aber in seiner einfachsten Form ist es auch eine großartige Möglichkeit, JSON zum Anzeigen schön auszudrucken.

jsonpp ist ein sehr schöner JSON-Drucker mit Befehlszeile.

Aus der README:

Ziemlich gedruckte Webservice-Antworten wie folgt:

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

und machen Sie die Dateien auf Ihrer Festplatte schön:

jsonpp data/long_malformed.json

Wenn Sie mit Mac OS X arbeiten, können Sie brew install jsonpp . Wenn nicht, können Sie die Binärdatei einfach irgendwo in Ihren $PATH kopieren.





pretty-print