ToolHub
View All Posts

Best Practices für die JSON-Formatierung

JSON (JavaScript Object Notation) ist zum De-facto-Standard für den Datenaustausch im Web geworden. APIs geben JSON zurück, Konfigurationsdateien verwenden JSON und sogar Datenbanken speichern JSON-Dokumente. Trotz seiner Einfachheit hat JSON strenge Syntaxregeln, die leicht verletzt werden können, und schlecht formatiertes JSON führt zu Debugging-Schwierigkeiten, Leistungsproblemen und Sicherheitslücken. Dieser Leitfaden behandelt alles, was Sie über die korrekte Formatierung von JSON wissen müssen, von der grundlegenden Syntax bis zu fortgeschrittenen Themen wie Schema-Validierung und dem Umgang mit großen Dateien.

Was ist JSON?

JSON ist ein leichtgewichtiges, textbasiertes Datenaustauschformat, das von der JavaScript-Objektliteral-Syntax abgeleitet ist. Es wurde von Douglas Crockford in den frühen 2000er Jahren spezifiziert und als ECMA-404 und RFC 8259 standardisiert. JSON wurde mit den Zielen Einfachheit, Lesbarkeit für Menschen und einfache Implementierung in verschiedenen Programmiersprachen entwickelt. Heute enthält jede wichtige Programmiersprache integrierte JSON-Unterstützung.

JSON unterstützt sechs Datentypen: Strings (doppelte Anführungszeichen), Zahlen (Ganzzahlen und Gleitkommazahlen), Boolesche Werte (true und false), null-Werte, Objekte (ungeordnete Schlüssel-Wert-Sammlungen) und Arrays (geordnete Listen). Es unterstützt nativ keine Kommentare, Datumsangaben, Binärdaten oder undefined-Werte.

JSON-Syntaxregeln

JSON hat eine Syntax, die strikt befolgt werden muss. Selbst ein einzelnes falsches Zeichen kann dazu führen, dass das gesamte Dokument nicht geparst werden kann. Das Verständnis dieser Regeln verhindert die häufigsten Formatierungsfehler.

Strings müssen doppelte Anführungszeichen verwenden

Alle String-Werte und Objektschlüssel müssen in doppelte Anführungszeichen eingeschlossen werden. Einfache Anführungszeichen sind keine gültigen JSON-String-Trennzeichen. Dies ist einer der häufigsten Fehler von Entwicklern, die von JavaScript kommen, wo einfache und doppelte Anführungszeichen austauschbar verwendet werden können.

// Invalid - single quotes
{'name': 'Alice', 'age': 30}

// Valid - double quotes
{"name": "Alice", "age": 30}

Objektschlüssel müssen in Anführungszeichen stehen

Im Gegensatz zu JavaScript-Objektliteralen erfordert JSON, dass alle Objektschlüssel in doppelte Anführungszeichen eingeschlossen werden. Nicht gequotete Schlüssel sind ein Syntaxfehler.

// Invalid - unquoted keys
{name: "Alice", age: 30}

// Valid - quoted keys
{"name": "Alice", "age": 30}

Keine nachgestellten Kommas

JSON erlaubt keine Kommas nach dem letzten Element eines Objekts oder Arrays. Dies ist ein weiterer häufiger Fehler von JavaScript-Entwicklern, da nachgestellte Kommas in JavaScript erlaubt (und in manchen Styleguides sogar empfohlen) sind.

// Invalid - trailing comma
{
  "name": "Alice",
  "age": 30,
}

// Valid - no trailing comma
{
  "name": "Alice",
  "age": 30
}

Keine Kommentare unterstützt

JSON unterstützt keine Kommentare. Weder // einzeilige Kommentare noch /* */ mehrzeilige Kommentare sind in JSON gültig. Wenn Sie Dokumentation einfügen müssen, erwägen Sie die Verwendung einer separaten Dokumentationsdatei oder des JSONC-Formats (JSON with Comments), das von einigen Tools unterstützt wird.

Strenge Werttypen

JSON-Werte müssen einer der sechs unterstützten Typen sein. undefined, NaN, Infinity und -Infinity sind keine gültigen JSON-Werte. Die Aufnahme eines dieser Werte führt zu Parsing-Fehlern oder erzeugt nicht standardkonformes JSON, das viele Parser ablehnen.

Häufige Formatierungsfehler

Neben Syntaxfehlern gibt es mehrere Formatierungsfehler, die technisch gültiges, aber problematisches JSON erzeugen:

Pretty-Print vs. komprimiert

Die beiden Hauptformatierungsmodi von JSON dienen unterschiedlichen Zwecken, und es ist wichtig, das richtige Format im richtigen Kontext zu verwenden.

Pretty-Print JSON

Pretty-Print fügt Einrückungen und Zeilenumbrüche hinzu, um JSON für Menschen lesbar zu machen. Dies ist während der Entwicklung, beim Debugging und bei der Dokumentation unerlässlich. Die meisten JSON-Formatierer verwenden standardmäßig eine Einrückung von 2 Leerzeichen:

{
  "users": [
    {
      "id": 1,
      "name": "Alice",
      "email": "alice@example.com"
    },
    {
      "id": 2,
      "name": "Bob",
      "email": "bob@example.com"
    }
  ]
}

Komprimiertes JSON

Komprimiertes JSON entfernt alle unnötigen Leerzeichen und erzeugt das kleinstmögliche gültige JSON. Dies ist für Produktions-APIs, bei denen jedes Byte zählt, entscheidend:

{"users":[{"id":1,"name":"Alice","email":"alice@example.com"},{"id":2,"name":"Bob","email":"bob@example.com"}]}

Wann welche verwendet werden

KontextFormatGrund
Entwicklung und DebuggingPretty-PrintLesbarkeit und schnelles Überfliegen
KonfigurationsdateienPretty-PrintMenschen müssen diese Dateien lesen und bearbeiten
Produktions-API-AntwortenKomprimiertKleinere Nutzlast, schnellere Übertragung
ProtokolldateienKomprimiert (ein Objekt pro Zeile)Kompakte Speicherung, einfach mit grep durchsuchbar
VersionskontrollePretty-PrintAussagekräftige Diffs und weniger Merge-Konflikte
Best Practice: Speichern Sie JSON in der Versionskontrolle immer in formatierter Form. Wenden Sie die Komprimierung als Build-Schritt vor der Bereitstellung an. So erhalten Sie lesbare Diffs und profitieren gleichzeitig von den Leistungsvorteilen von komprimiertem JSON in der Produktion.

JSON Schema-Validierung

Während die JSON-Syntaxvalidierung prüft, ob ein Dokument wohlgeformt ist, validiert sie nicht, ob die Daten die erwartete Struktur, Typen oder Werte haben. JSON Schema füllt diese Lücke, indem es ein Vokabular zur Beschreibung der erwarteten Form von JSON-Daten bereitstellt.

Was ist JSON Schema?

JSON Schema ist ein JSON-Dokument, das die Struktur anderer JSON-Dokumente beschreibt. Es ermöglicht Ihnen, erforderliche Felder, erwartete Typen, Wertebereiche, String-Muster und verschachtelte Objektstrukturen anzugeben. Ein JSON-Dokument, das alle Einschränkungen eines Schemas erfüllt, wird als gültige Instanz bezeichnet.

Gängige Schema-Funktionen

Wann Schema-Validierung verwendet wird

Sie sollten JSON Schema-Validierung immer dann verwenden, wenn Sie JSON von externen Quellen erhalten: API-Anforderungstexte, Konfigurationsdateien, Datenimporte und Nachrichtenwarteschlangen-Nutzdaten. Die Schema-Validierung erkennt Fehler frühzeitig, liefert klare Fehlermeldungen und dient als lebendige Dokumentation des Datenformats. Bibliotheken wie Ajv (JavaScript), jsonschema (Python) und json-schema-validator (Java) machen die Integration der Schema-Validierung in jede Anwendung einfach.

Leistungsauswirkungen der JSON-Größe

Die Größe eines JSON-Dokuments wirkt sich direkt auf die Anwendungsleistung in mehreren Aspekten aus: Netzwerkübertragungszeit, Parsing-Zeit und Speicherverbrauch. Das Verständnis dieser Auswirkungen hilft Ihnen, fundierte Entscheidungen über die JSON-Formatierung und -Struktur zu treffen.

Netzwerkübertragung

Jedes Byte von JSON muss über das Netzwerk vom Server zum Client übertragen werden. Auf schnellen Verbindungen mag der Unterschied zwischen 10 KB und 100 KB vernachlässigbar erscheinen, aber für Benutzer in Mobilfunknetzen oder Regionen mit langsamem Internet sind die Auswirkungen erheblich. Studien zeigen, dass jede zusätzliche 100 ms Ladezeit die Conversion-Rate um etwa 1 % senkt. Die Komprimierung reduziert die JSON-Größe in der Regel um 30-50 %, und die gzip-Komprimierung reduziert sie um weitere 70-85 %. Aktivieren Sie immer die gzip- oder Brotli-Komprimierung für JSON-API-Antworten.

Parsing-Leistung

Das Parsen von JSON ist überraschend teuer. Bei großen Dokumenten (über 1 MB) kann das Parsen auf Mobilgeräten Hunderte von Millisekunden dauern. Die Kosten sind ungefähr linear zur Dokumentgröße. Wichtige Strategien zur Reduzierung der Parsing-Kosten sind: Nur die vom Client benötigten Daten senden (Feldfilterung), Paginierung für große Ergebnismengen und die Verwendung effizienterer Serialisierungsformate wie Protocol Buffers oder MessagePack für die Kommunikation zwischen internen Diensten, bei denen keine Lesbarkeit für Menschen erforderlich ist.

Speichernutzung

Geparstes JSON verbraucht in der Regel 3-10 Mal mehr Speicher als seine serialisierte Form, da jeder Wert zu einem separaten Objekt mit eigener Speicherzuweisung wird. Ein 1-MB-JSON-String kann nach dem Parsen 5-10 MB RAM verbrauchen. Für JavaScript-Anwendungen, die in Browsern mit begrenztem Speicher laufen, kann dies zu Leistungseinbußen oder Abstürzen auf Low-End-Geräten führen.

JSON vs. JSONL

JSON Lines (JSONL oder NDJSON) ist ein verwandtes Format, das eine wichtige Einschränkung von JSON behebt: die Anforderung, das gesamte Dokument als einzelne Einheit zu parsen. In JSONL ist jede Zeile der Datei ein vollständiges, eigenständiges JSON-Objekt.

Wann JSONL verwendet wird

Wann bei Standard-JSON geblieben wird

Umgang mit großen JSON-Dateien

Große JSON-Dateien (über 10 MB) stellen besondere Herausforderungen dar, die eine spezielle Behandlung erfordern. Standard-Parsing-Methoden können bei dieser Größenordnung versagen oder schlecht abschneiden.

Streaming-Parser

Streaming-Parser (oder SAX-artige Parser) verarbeiten JSON inkrementell, ohne das gesamte Dokument in den Speicher zu laden. Sie emittieren Ereignisse, wenn sie auf Strukturelemente wie Objektanfänge, Schlüssel-Wert-Paare und Array-Elemente stoßen. Dieser Ansatz verwendet unabhängig von der Dateigröße konstanten Speicher. Bibliotheken wie oboe.js (JavaScript), ijson (Python) und die Jackson Streaming API (Java) bieten Streaming-JSON-Parsing.

Praktische Tipps für große Dateien

JSON-Sicherheitshinweise

Obwohl JSON ein Datenformat und an sich nicht unsicher ist, kann die Art und Weise, wie Anwendungen JSON verarbeiten, Schwachstellen einführen. Das Verständnis dieser Risiken ist entscheidend für den Aufbau sicherer Systeme.

Verwenden Sie niemals eval() zum Parsen von JSON

Die wichtigste Sicherheitsregel: Verwenden Sie niemals die JavaScript-Funktion eval() zum Parsen von JSON. eval() führt beliebigen JavaScript-Code aus, was bedeutet, dass eine bösartige JSON-Nutzlast Code auf dem Computer des Benutzers ausführen kann. Verwenden Sie immer JSON.parse(), das nur gültiges JSON parst und jeglichen ausführbaren Code ablehnt. Dies ist nicht verhandelbar.

JSONP und Cross-Origin-Risiken

JSONP (JSON with Padding) war eine Technik, um die Einschränkungen der Same-Origin-Policy zu umgehen, bevor CORS weit verbreitet war. Es funktioniert, indem JSON-Daten in einen Funktionsaufruf verpackt werden, der als Skript ausgeführt wird. Dies ist grundsätzlich gefährlich, da es beliebiges JavaScript von einem Drittanbieter-Server ausführt. Wenn Sie sowohl Client als auch Server kontrollieren, verwenden Sie CORS anstelle von JSONP. JSONP sollte als veraltete Technologie betrachtet und in neuen Anwendungen vermieden werden.

Prototype Pollution

Seien Sie beim Zusammenführen oder Deep-Copying von JSON-Objekten in JavaScript vorsichtig mit Schlüsseln wie __proto__, constructor und prototype. Wenn benutzerbereitgestelltes JSON ohne Bereinigung dieser Schlüssel rekursiv in ein bestehendes Objekt zusammengeführt wird, kann es den Prototyp aller Objekte in der Anwendung verändern, was zu Rechteausweitung oder Denial-of-Service führt. Bereinigen Sie Objektschlüssel immer vor dem Zusammenführen.

Denial-of-Service durch tiefe Verschachtelung

Sorgfältig konstruierte JSON-Dokumente mit extremer Verschachtelungstiefe (Tausende von Ebenen) können Stack-Overflow-Fehler in rekursiven Parsern verursachen. Entschärfen Sie dies, indem Sie eine maximale Verschachtelungstiefe in Ihrem Parser festlegen. Die meisten Produktions-JSON-Parser erlauben Ihnen, dieses Limit zu konfigurieren.

Eingabevalidierung

Vertrauen Sie niemals JSON-Daten von externen Quellen. Validieren Sie immer die Struktur, Typen und Wertebereiche von eingehendem JSON, bevor Sie es verwenden. Die JSON Schema-Validierung ist der robusteste Ansatz, aber selbst einfache Prüfungen auf erforderliche Felder und Typzusicherungen bieten erheblichen Schutz vor fehlerhaften oder bösartigen Eingaben.

Müssen Sie JSON formatieren, validieren oder komprimieren? Probieren Sie unsere kostenlosen Online-JSON-Tools aus. Die gesamte Verarbeitung findet in Ihrem Browser statt und gewährleistet maximale Geschwindigkeit und Privatsphäre.

JSON-FormatierungstoolJSON-Validator

Häufig gestellte Fragen

Was ist der Unterschied zwischen Pretty-Print und komprimiertem JSON?

Pretty-Print-JSON enthält Leerzeichen (Einrückungen, Zeilenumbrüche) für die Lesbarkeit durch Menschen, während komprimiertes JSON alle unnötigen Leerzeichen entfernt, um die Dateigröße zu minimieren. Verwenden Sie Pretty-Print-JSON während der Entwicklung und beim Debugging und komprimiertes JSON in der Produktion für kleinere Netzwerklasten und schnelleres Parsing.

Was sind die häufigsten JSON-Formatierungsfehler?

Die häufigsten Fehler sind: nachgestellte Kommas nach dem letzten Element eines Objekts oder Arrays, einfache Anführungszeichen anstelle von doppelten für Strings, Hinzufügen von Kommentaren (JSON unterstützt keine Kommentare), nicht gequotete Objektschlüssel und das Einfügen von Werten wie undefined oder NaN, die keine gültigen JSON-Werte sind.

Wann sollte ich JSONL statt JSON verwenden?

Verwenden Sie JSONL (JSON Lines), wenn Sie Datensätze inkrementell verarbeiten müssen, z. B. bei Protokolldateien, Datenströmen oder großen Datensätzen, die nicht in den Speicher passen. Jede Zeile ist ein vollständiges JSON-Objekt, sodass Sie jeweils eine Zeile lesen und parsen können, ohne die gesamte Datei zu laden. Standard-JSON erfordert das Parsen des gesamten Dokuments, bevor auf Daten zugegriffen werden kann.

Wie validiere ich JSON gegen ein Schema?

Verwenden Sie JSON Schema, um die erwartete Struktur von JSON-Daten zu definieren, und validieren Sie dann Instanzen gegen dieses Schema mit Bibliotheken wie Ajv (JavaScript), jsonschema (Python) oder Online-Validatoren. JSON Schema ermöglicht es Ihnen, erforderliche Felder, Typen, Wertebereiche, String-Muster und verschachtelte Objektstrukturen anzugeben.

Ist JSON für den Datenaustausch sicher?

JSON selbst ist ein Datenformat und weder sicher noch unsicher. Die Art und Weise, wie Sie JSON parsen und verwenden, kann jedoch Schwachstellen einführen. Das Hauptrisiko besteht darin, eval() zum Parsen von JSON zu verwenden (tun Sie dies niemals – verwenden Sie immer JSON.parse()). Seien Sie außerdem vorsichtig mit JSONP, das die Same-Origin-Policy umgehen kann. Validieren und bereinigen Sie JSON-Daten von nicht vertrauenswürdigen Quellen immer vor der Verwendung.