JSON minifizieren: wann es sich lohnt und wie es geht
JSON zu minifizieren heißt, alle überflüssigen Leerzeichen, Tabs und Zeilenumbrüche zu entfernen, sodass das Dokument in einer einzigen Zeile steht. Der Inhalt bleibt exakt gleich. Bei Dateien, die ohnehin per gzip oder Brotli übertragen werden, bringt das wenig. Bei Umgebungsvariablen, Logzeilen, localStorage oder URL-Parametern ist eine einzeilige, kompakte Form dagegen oft nötig oder zumindest praktisch.
Am schnellsten geht es im JSON-Formatierer: JSON einfügen, beim Stil „Minifiziert“ wählen, Ergebnis kopieren. Alles läuft lokal in deinem Browser, es wird nichts an einen Server gesendet. Weiter unten findest du auch die Varianten für JavaScript, jq und Python.
Was Minify entfernt (und was nicht)
JSON erlaubt laut RFC 8259 Leerraum zwischen den Tokens: Leerzeichen, Tab, Zeilenumbruch (LF) und Wagenrücklauf (CR). Genau diesen sogenannten insignifikanten Leerraum entfernt Minify. Mehr nicht.
Nicht angetastet werden:
- Leerzeichen innerhalb von Strings.
"Ada Lovelace"bleibt"Ada Lovelace". - Die Werte selbst. Zahlen, Strings,
true,falseundnulländern sich nicht. - Die Reihenfolge der Schlüssel.
Ein Beispiel, zuerst formatiert (pretty), dann minifiziert:
{
"name": "Ada",
"aktiv": true,
"rollen": [
"admin",
"editor"
],
"adresse": {
"ort": "Berlin",
"plz": "10115"
}
}
{"name":"Ada","aktiv":true,"rollen":["admin","editor"],"adresse":{"ort":"Berlin","plz":"10115"}}
Beide Varianten sind für jeden JSON-Parser identisch. Die umgekehrte Richtung, also wieder lesbar machen, ist ebenfalls im JSON-Formatierer möglich.
Wie viel spart das wirklich?
Die ehrliche Antwort: weniger, als man denkt, sobald Kompression im Spiel ist.
Beim obigen Beispiel hat die formatierte Datei mit zwei Leerzeichen Einrückung 142 Bytes, die minifizierte 97 Bytes (jeweils mit abschließendem Zeilenumbruch). Das sind rund 32 % weniger. Das ist ein einzelnes, kleines Beispiel zur Veranschaulichung, kein Benchmark. Der Anteil hängt stark von der Struktur ab: Tief verschachtelte JSON-Dokumente mit kurzen Werten sparen prozentual viel, Dokumente mit langen Strings kaum.
Wird die Antwort per gzip oder Brotli komprimiert, schrumpft der Unterschied deutlich. Einrückung besteht aus sehr gleichmäßigen, sich wiederholenden Zeichenfolgen, die Kompressionsverfahren fast kostenlos abbilden. Nach der Kompression liegen formatierte und minifizierte Variante meist nah beieinander. Wie nah, hängt von deinen Daten ab: Miss es mit deinem echten Payload, statt dich auf Faustwerte zu verlassen.
Daraus folgt:
- HTTP-API mit aktivierter Kompression: Minify bringt wenig. Der Hebel liegt eher darin, überflüssige Felder wegzulassen.
- Ohne Kompression (Speicher, Nachrichtenqueue, Zeilenprotokoll): Minify spart spürbar.
- Zum Lesen und Debuggen: formatiert ist besser. Minifiziere erst am Ende, wo es nötig ist.
Wann Minify sinnvoll ist
Unabhängig von der Größe gibt es Stellen, an denen Zeilenumbrüche stören oder jedes Byte zählt:
- Umgebungsvariablen. Ein mehrzeiliger Wert in
.env, Docker-Compose oder CI-Einstellungen führt schnell zu Quoting-Problemen. Einzeiliges JSON ist deutlich unkomplizierter. Die Anführungszeichen musst du je nach Umgebung trotzdem passend schützen. - Logzeilen. Strukturiertes Logging erwartet meist ein JSON-Objekt pro Zeile (oft „JSON Lines“ oder NDJSON genannt). Ein formatiertes Objekt über zehn Zeilen würde sich nicht mehr als ein Eintrag lesen lassen.
localStorageundsessionStorage. Der Speicher ist pro Ursprung begrenzt (meist einige Megabyte, je nach Browser). Es wird ein String gespeichert, und da gibt es keinen Grund für Einrückung.- URL-Parameter. URLs haben praktische Längengrenzen. Ein kompakter Wert hilft, und er muss zusätzlich URL-kodiert werden. Bei größeren Datenmengen ist ein Parameter allerdings die falsche Stelle.
- Eingebettete Konfiguration in HTML-Attributen, Skript-Tags oder Shell-Skripten.
So minifizierst du JSON
Im JSON-Formatierer
Öffne den JSON-Formatierer, füge dein JSON ein und wähle unter „Stil“ die Option „Minifiziert“. Ist das JSON fehlerhaft, bekommst du die Fehlerstelle mit Zeile und Spalte auf Deutsch angezeigt, statt eines kaputten Ergebnisses. Die Ausgabe ist verlustfrei: Zahlen werden so übernommen, wie sie geschrieben sind, die Schlüsselreihenfolge bleibt erhalten, und auch doppelte Schlüssel gehen nicht verloren.
In JavaScript
JSON.stringify ohne weitere Argumente erzeugt kompaktes JSON:
const obj = { name: "Ada", rollen: ["admin", "editor"] };
JSON.stringify(obj);
// '{"name":"Ada","rollen":["admin","editor"]}'
Hast du bereits einen JSON-String, den du minifizieren willst, führt der Weg über parse und stringify:
const minified = JSON.stringify(JSON.parse(text));
Beachte dabei: Das ist ein Umweg über JavaScript-Werte. Zahlen jenseits von 2^53 verlieren Genauigkeit (siehe Große Zahlen in JSON), und doppelte Schlüssel kollabieren zu einem. Für normale Konfigurationsdaten ist das unkritisch, für IDs und Geldbeträge in Rohdaten nicht.
Mit jq
jq -c . daten.json
-c steht für „compact output“. Aus einer Pipe:
curl -s https://example.com/api | jq -c .
jq liest die Daten ebenfalls als Werte ein und schreibt sie neu. Bei Zahlen mit sehr vielen Stellen und bei doppelten Schlüsseln kann deshalb das Ergebnis vom Original abweichen. Das Verhalten hängt von der jq-Version ab. Mehr zur Kommandozeile steht in JSON auf der Kommandozeile formatieren.
Mit Python
Ab Python 3.9 kennt json.tool die Option --compact:
python -m json.tool --compact daten.json
In einem Skript funktioniert das auf jeder Version über separators:
import json
with open("daten.json", encoding="utf-8") as f:
obj = json.load(f)
print(json.dumps(obj, separators=(",", ":"), ensure_ascii=False))
Ohne separators setzt json.dumps weiterhin ein Leerzeichen nach Komma und Doppelpunkt, das Ergebnis wäre also nicht ganz minimal. ensure_ascii=False verhindert, dass Umlaute als \u00fc geschrieben werden (siehe Sonderzeichen in JSON escapen).
Minify ist keine Verschlüsselung
Ein minifiziertes JSON ist nicht „versteckt“. Wer es in einen Formatierer einfügt, hat es in einer Sekunde wieder lesbar. Passwörter, Tokens und personenbezogene Daten gehören deshalb weiterhin nicht in Logs oder URLs, egal wie kompakt sie aussehen.
Kurz gesagt
- Minify entfernt nur insignifikanten Leerraum zwischen den Tokens. Werte, Strings und Schlüsselreihenfolge bleiben unverändert.
- Mit gzip oder Brotli ist der Gewinn klein. Ohne Kompression, etwa in Logs, Umgebungsvariablen oder
localStorage, lohnt es sich eher. - Im Browser: JSON-Formatierer mit dem Stil „Minifiziert“. Im Code:
JSON.stringify(obj),jq -c .oderpython -m json.tool --compact(ab Python 3.9). - Wer über
parseundstringifyoderjqgeht, riskiert bei sehr großen Zahlen und doppelten Schlüsseln Abweichungen.
Weiterlesen: JSON auf der Kommandozeile formatieren, JSON im Editor formatieren, Große Zahlen in JSON.