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

4voto

calbertts Punkte 1482

Ich habe mir diese Lösung ausgedacht: https://calbertts.medium.com/unix-pipelines-with-curl-requests-and-serverless-functions-e21117ae4c65

# this in your bash profile
jsonprettify() {
  curl -Ss -X POST -H "Content-Type: text/plain" --data-binary @- https://jsonprettify.vercel.app/api/server?indent=$@
}

echo '{"prop": true, "key": [1,2]}' | jsonprettify 4
# {
#     "prop": true,
#     "key": [
#         1,
#         2
#     ]
# }

Sie brauchen nichts zu installieren, wenn Sie eine Internetverbindung und cURL installiert haben, können Sie diese Funktion nutzen.

Wenn Sie auf einem anderen Host sind, auf dem Sie nichts installieren können, wäre dies eine perfekte Lösung für dieses Problem.

4voto

numan salati Punkte 19166

So geht's mit Groovy Drehbuch.

Erstellen Sie ein Groovy-Skript, z. B. "pretty-print".

#!/usr/bin/env groovy

import groovy.json.JsonOutput

System.in.withReader { println JsonOutput.prettyPrint(it.readLine()) }

Skript ausführbar machen:

chmod +x pretty-print

Jetzt über die Befehlszeile,

echo '{"foo": "lorem", "bar": "ipsum"}' | ./pretty-print

1 Stimmen

So sehr ich Groovy auch liebe, für kleine Skripte wie dieses ist es aufgrund des Overheads der JVM nicht besonders geeignet. Meine informellen Messungen zeigen jq etwa 50x schneller.

3voto

Orest Ivasiv Punkte 181

Hier ist ein Groovy-Einzeiler:

echo '{"foo": "lorem", "bar": "ipsum"}' | groovy -e 'import groovy.json.*; println JsonOutput.prettyPrint(System.in.text)'

3voto

aidanmelen Punkte 5260

https://github.com/aidanmelen/json_pretty_print

from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import print_function
from __future__ import division

import json
import jsonschema

def _validate(data):
    schema = {"$schema": "http://json-schema.org/draft-04/schema#"}
    try:
        jsonschema.validate(data, schema,
                            format_checker=jsonschema.FormatChecker())
    except jsonschema.exceptions.ValidationError as ve:
        sys.stderr.write("Whoops, the data you provided does not seem to be " \
        "valid JSON.\n{}".format(ve))

def pprint(data, python_obj=False, **kwargs):
    _validate(data)
    kwargs["indent"] = kwargs.get("indent", 4)
    pretty_data = json.dumps(data, **kwargs)
    if python_obj:
        print(pretty_data)
    else:
       repls = (("u'",'"'),
                ("'",'"'),
                ("None",'null'),
                ("True",'true'),
                ("False",'false'))
    print(reduce(lambda a, kv: a.replace(*kv), repls, pretty_data))

3voto

vadimk Punkte 1455

Mit JavaScript/Node.js: Schauen Sie sich die vkBeautify.js-Plugin die sowohl für JSON- als auch für XML-Text einen schönen Druck ermöglicht.

Es ist in einfachem JavaScript geschrieben, weniger als 1,5 KB (minified) und sehr schnell.

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