JSON ist das Standardformat fuer den Datenaustausch im Web. Jede API, jede Konfigurationsdatei und jeder AJAX-Aufruf transportiert JSON. Bei kleinen Datenmengen denkt niemand ueber die Groesse nach, doch sobald API-Antworten Tausende Datensaetze enthalten, wird die Byte-Groesse zum echten Performance-Faktor. Dieser Artikel erklaert, wie sich die Groesse einer JSON-Datei zusammensetzt, warum Zeichenzahl und Byte-Zahl nicht dasselbe sind und wie du grosse Antworten spuerbar verkleinerst.
Zeichen sind nicht gleich Bytes
Der haeufigste Irrtum bei der Groessenmessung: Man zaehlt die Zeichen und nimmt an, das sei die Dateigroesse. Das stimmt nur, solange ausschliesslich einfache ASCII-Zeichen vorkommen. JSON wird heute praktisch immer in UTF-8 kodiert, und in UTF-8 belegen verschiedene Zeichen unterschiedlich viele Bytes:
- Standard-ASCII-Zeichen (a-z, 0-9, Klammern, Anfuehrungszeichen): 1 Byte pro Zeichen.
- Umlaute und akzentuierte Zeichen (ae, oe, ue, e mit Akzent): 2 Bytes.
- Die meisten weiteren Sonderzeichen und viele Symbole: 3 Bytes.
- Emojis und seltene Zeichen: 4 Bytes.
Ein JSON mit viel deutschem Text und Umlauten ist in Bytes also groesser, als die reine Zeichenzahl vermuten laesst. Genau diesen Unterschied macht der JSON Groesse Rechner sichtbar: Er zeigt dir Zeichenzahl, tatsaechliche Byte-Groesse in UTF-8 und die minifizierte Groesse nebeneinander.
Was JSON aufblaeht
JSON ist von Natur aus gespraechig. Mehrere Eigenschaften des Formats kosten Platz:
- Wiederholte Schluesselnamen: In einem Array aus 1000 Objekten steht jeder Feldname 1000 Mal. Lange, beschreibende Schluessel wie
"customerEmailAddress"summieren sich enorm. - Strukturzeichen: Geschweifte und eckige Klammern, Doppelpunkte, Kommas und Anfuehrungszeichen sind notwendig, aber reiner Overhead.
- Whitespace: Eingerueckte, schoen formatierte JSON-Dateien enthalten viele Leerzeichen, Tabs und Zeilenumbrueche, die fuer den Computer voellig ueberfluessig sind.
Gerade der letzte Punkt ist der einfachste Hebel: Eine huebsch formatierte JSON-Antwort kann durch reines Entfernen des Whitespace deutlich schrumpfen, ohne dass auch nur ein einziger Datenwert verloren geht.
Minifizieren: der schnellste Gewinn
Minifizieren bedeutet, allen nicht-funktionalen Whitespace zu entfernen, also Einrueckungen und Zeilenumbrueche. Aus einer mehrzeiligen, eingerueckten Struktur wird eine einzige kompakte Zeile. Fuer den Parser im Browser ist das Ergebnis identisch, fuer die Uebertragung aber deutlich kleiner. Bei stark eingeruecktem JSON sind Einsparungen von 20 bis 30 Prozent allein durch Minifizierung realistisch.
Der Grundsatz lautet daher: Schoen formatiertes JSON ist fuer Menschen, minifiziertes JSON fuer die Uebertragung. Beim Entwickeln und Debuggen willst du die lesbare Variante, in Produktion sendest du die kompakte. Der JSON Groesse Rechner zeigt dir den Unterschied in Bytes direkt an, sodass du den Effekt sofort einschaetzt. Zum Pruefen und Aufhuebschen der Struktur hilft daneben der JSON Validator.
Komprimierung schlaegt Minifizierung
Noch wirksamer als Minifizieren ist die Transportkomprimierung mit gzip oder brotli, die der Server automatisch anwendet. Weil JSON sehr repetitiv ist, also dieselben Schluesselnamen und Strukturmuster immer wieder vorkommen, laesst es sich hervorragend komprimieren. Reduktionen von 80 bis 90 Prozent gegenueber der unkomprimierten Groesse sind bei grossen, gleichfoermigen Datensaetzen keine Seltenheit.
Wichtig zu verstehen: Minifizierung und Komprimierung schliessen sich nicht aus, sie ergaenzen sich. Komprimiertes, minifiziertes JSON ist am kleinsten. Allerdings holt die gzip-Komprimierung den Grossteil der Einsparung schon allein, weshalb sie immer aktiviert sein sollte, bevor man ueber weitere Optimierungen nachdenkt.
Strukturelle Optimierung bei sehr grossen Daten
Wenn Minifizieren und Komprimieren nicht reichen, lohnt ein Blick auf die Datenstruktur selbst. Statt eines Arrays aus Objekten mit wiederholten Schluesseln kann man die Daten spaltenorientiert ablegen: ein Array mit den Feldnamen plus ein Array aus reinen Wert-Arrays. Damit verschwinden die tausendfach wiederholten Schlusselnamen. Diese Optimierung erhoeht allerdings die Komplexitaet auf der Empfaengerseite und lohnt sich erst bei wirklich grossen Datenmengen.
Haeufige Fragen
Warum ist meine JSON-Datei groesser als die Zeichenzahl?
Weil sie Zeichen enthaelt, die in UTF-8 mehr als ein Byte belegen, typischerweise Umlaute, Akzente, Sonderzeichen oder Emojis. Die Byte-Groesse ist immer mindestens so gross wie die Zeichenzahl, bei reinem ASCII-Text sind beide Werte identisch.
Sollte ich JSON in Produktion immer minifizieren?
Fuer API-Antworten und ausgelieferte Dateien ja. Fuer Konfigurationsdateien, die Menschen lesen und bearbeiten, behaeltst du besser die lesbare Form. Die Faustregel: Alles, was ueber die Leitung geht und nicht von Hand bearbeitet wird, sollte minifiziert und komprimiert sein.
Wie viel bringt das Kuerzen von Schluesselnamen?
Bei vielen wiederholten Objekten kann das spuerbar sein, aber gzip gleicht die Wiederholungen ohnehin stark aus. In den meisten Faellen lohnt es sich nicht, die Lesbarkeit fuer kurze, kryptische Schluessel zu opfern. Erst bei extrem grossen, leistungskritischen Antworten wird dieser Schritt interessant.