JSON Formatierer
JSON mit 2 Leerzeichen, 4 Leerzeichen oder Tabs formatieren, ohne eine einzige Ziffer zu verlieren.
Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen
JSON zu formatieren heißt, den Leerraum hinzuzufügen, den ein Mensch braucht und eine Maschine nicht: ein Member pro Zeile, gleichmäßige Einrückung, ein Leerzeichen nach jedem Doppelpunkt. Die Daten ändern sich nicht. Nur ihre Darstellung.
Genau dieser letzte Satz ist die Stelle, an der es leicht schiefgeht. Ein Formatierer, der Ihr Dokument in JavaScript-Werte parst und wieder serialisiert, hat Ihre Zahlen bereits umgeschrieben, bevor er irgendetwas ausgibt - und die meisten tun genau das.
Was das Formatieren nicht verändert
Dieser Formatierer gibt die gelesenen Tokens erneut aus, statt geparste Werte neu zu serialisieren. Der Text jeder Zahl, jeder Zeichenkette und jedes Literals kommt also Byte für Byte zurück, und nur der Leerraum dazwischen wird neu geschrieben.
Das ist wichtiger, als es klingt. Schicken Sie ein Dokument mit einer 19-stelligen ID durch einen Formatierer, der auf JSON.parse und JSON.stringify aufbaut, und die ID kommt verändert zurück - lautlos, ohne jede Warnung in der Oberfläche.
- Zahlen behalten ihren exakten Text
- 1.50 bleibt 1.50, 1e3 bleibt 1e3, -0 bleibt -0, und 12345678901234567890 bleibt es selbst, statt zu 12345678901234567000 zu werden.
- Zeichenketten werden wortgetreu kopiert
- Ein escaptes \u00e9 bleibt escapt, ein literales é bleibt literal. Beim Formatieren wird nicht entschieden, wie eine Zeichenkette kodiert sein sollte - also entscheidet es das auch nicht.
- Die Schlüsselreihenfolge bleibt erhalten
- Sofern Sie die Sortierung nicht ausdrücklich einschalten. JSON-Objekte sind laut Spezifikation ungeordnet, aber in der Praxis bewahrt jeder Parser die Einfügereihenfolge, und Diffs hängen davon ab.
- Doppelte Schlüssel bleiben stehen und werden markiert
- Einen davon zu entfernen würde ändern, was ein Konsument sieht. Stattdessen bekommen Sie eine Warnung, die beide Positionen benennt.
Welche Einrückung wählen
Zwei Leerzeichen ist hier die Voreinstellung, weil npm, Prettier und fast das gesamte JavaScript-Tooling das ausgeben, und weil Verschachtelung in JSON schnell tief wird. Vier Leerzeichen lesen sich bei flachen Konfigurationsdateien besser. Tabulatoren lassen jeden Leser die Breite selbst wählen - das ist das Barrierefreiheitsargument dafür - und sie komprimieren geringfügig besser.
Für alles, was übertragen und nicht gelesen wird, minifizieren Sie stattdessen. Leerraum in einer JSON-Antwort ist reiner Overhead, und bei einem typischen API-Payload sind das zwischen 10 und 20 Prozent der Bytes.
Zeilenenden und abschließender Zeilenumbruch
Die Ausgabe verwendet standardmäßig LF. Eine CRLF-Option gibt es, weil Windows-Tooling und manche CI-Systeme darauf achten, und weil eine Datei, die beides mischt, ein Diff erzeugt, in dem jede Zeile geändert aussieht.
Leerraum außerhalb von Zeichenketten ist für einen Parser bedeutungslos, nichts davon berührt also die Gültigkeit. Es berührt Ihre Diffs, und das ist in der Praxis das, was auffällt.
How to do this in code
Dieselbe Operation im Code. Alle erzeugen eine Einrückung von zwei Leerzeichen; alle schreiben außerdem Ihre Zahlen um - der Handel, den Sie eingehen, wenn im Payload keine großen Ganzzahlen vorkommen.
js JavaScript
Das dritte Argument nimmt eine Anzahl Leerzeichen oder eine Zeichenkette entgegen, die als Einrückungseinheit dient.
const pretty = JSON.stringify(JSON.parse(text), null, 2);
// Tabs
const tabbed = JSON.stringify(JSON.parse(text), null, '\t'); py Python
ensure_ascii steht standardmäßig auf True, was jedes Zeichen mit Akzent in ein \u-Escape verwandelt. Das will fast niemand.
import json
pretty = json.dumps(json.loads(text), indent=2)
# Keep non-ASCII readable rather than escaping it
pretty = json.dumps(json.loads(text), indent=2, ensure_ascii=False)
# From the command line
# python -m json.tool --indent 2 input.json sh jq
jq sortiert standardmäßig nichts. Mit -S werden die Schlüssel sortiert.
jq . input.json # 2 spaces, the default
jq --indent 4 . input.json
jq --tab . input.json
jq -c . input.json # compact go Go
json.Indent kommt dem, was diese Seite tut, in einer Standardbibliothek am nächsten: Es formatiert die Bytes neu, ohne die Werte zu dekodieren.
var buf bytes.Buffer
if err := json.Indent(&buf, data, "", " "); err != nil {
return err
}
// json.Indent works on raw bytes, so unlike Unmarshal it does
// not touch your numbers at all. rb Ruby
require 'json'
pretty = JSON.pretty_generate(JSON.parse(text)) php PHP
PHP rückt mit vier Leerzeichen ein und escapt Schrägstriche und Unicode, wenn Sie diese Flags nicht übergeben.
$pretty = json_encode(
json_decode($text),
JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
); Häufige Fragen
- Gibt es eine Größenbeschränkung?
- Von dieser Seite wird keine auferlegt. Die praktische Obergrenze ist Ihr Browser: Eine JavaScript-Engine begrenzt eine einzelne Zeichenkette auf etwa 512 MB, größeres lässt sich also gar nicht erst halten. Ein 10-MB-Dokument zu formatieren kostet hier rund 780 Millisekunden Arbeit, die in einem Hintergrund-Worker laufen, damit die Seite bedienbar bleibt.
- Verändert das Formatieren meine Daten?
- Nein. Leerraum außerhalb von Zeichenketten hat in JSON keine Bedeutung, und dieser Formatierer gibt jeden Wert genau so wieder aus, wie Sie ihn geschrieben haben, statt ihn zu parsen und neu zu serialisieren. Das Sortieren der Schlüssel verändert das Dokument sehr wohl - deshalb ist es standardmäßig aus.
- Warum sieht meine formatierte Datei anders aus als die aus meinem Editor?
- Höchstwahrscheinlich liegt es am abschließenden Zeilenumbruch oder am Stil bei Arrays von Objekten. Manche Formatierer lassen kurze Arrays auf einer Zeile; dieser bleibt konsistent, was mehr Zeilen erzeugt, aber deutlich lesbarere Diffs.