Zum Hauptinhalt springen

JSON parsen

Der JSON-Inspektor prüft die RFC-8259-Syntax in Ihrem Browser und zeigt Typanzahlen, Strukturtiefe und Sprachzuordnungen. Er zeigt auch, welche ursprünglichen Zahlentokens sich bei der Umwandlung in JavaScript-Number ändern würden. Die Analyse lässt den Quelltext unverändert; Wertkonverter weisen solche unsicheren Umwandlungen zurück.

Nur lokal
JSON-Dokument
0 B1 ZeileZ. 1, Sp. 1

JSON-Dokument einfügen oder oben auf „Beispiel testen“ klicken, um seine Struktur zu analysieren.

Wie funktioniert JSON parsen?

„Parst es?“ ist eine Frage, die der Validator beantwortet. Dieses Tool beantwortet die nächste, die meist die interessantere ist: Worin hat es geparst? Ein Dokument kann völlig gültig sein und trotzdem nicht das sein, was Ihr Code erwartet, und die Lücke ist selten beim Lesen sichtbar.

Der Parser ist selbst geschrieben und ruft nicht JSON.parse auf. Er verwendet einen expliziten, iterativen Arbeitsstapel, um tief verschachtelte Dokumente ohne Überlauf des Aufrufstapels zu analysieren. Inhalt nach dem Wurzelwert wird zurückgewiesen. Jeder Schlüssel wird geschützt als eigene Eigenschaft zugewiesen: __proto__ bleibt ein normaler Schlüssel, statt den Objektprototyp zu verändern.

Die Analyse durchläuft dann den geparsten Wert und zählt, was drin ist: wie viele Objekte, Arrays, Strings, Zahlen, Booleans und null-Werte, wie tief die Verschachtelung geht und wie viele verschiedene Schlüssel auftauchen. Das reicht oft allein, um das Problem zu erkennen – ein Array, von dem Sie erwartet hatten, dass es Objekte enthält und das nur Strings hält; eine Struktur, drei Ebenen tiefer, als das Schema erlaubt; ein Dokument, das zu 90% aus null-Werten besteht, weil ein Upstream-Join gescheitert ist.

JSON hat einen einzigen Zahlentyp. JavaScripts JSON.parse wandelt ihn in ein IEEE-754-Double um, das alle Ganzzahlen nur bis 2^53−1 exakt darstellt. So wird 9007199254740993 ohne nativen Syntaxfehler zu 9007199254740992. Dieser Inspektor prüft die ursprünglichen Zahlentokens einschließlich Dezimalzahlen und Exponenten und kennzeichnet geänderte Dezimalwerte als Umwandlungsrisiko. Er zählt die Struktur, ohne gerundete Werte zu exportieren. JSON-Formatierer und JSON-Minimierer erhalten die ursprünglichen Tokens; Wertkonverter weisen diese unsicheren Zahlen zurück.

Dieselbe Tabelle zeigt den Rest der Zuordnung, weil die Annahmen je nach Sprache anders sind. Go liefert Ihnen float64 für jede Zahl, außer Sie dekodieren in einen typisierten Struct. Python unterscheidet int von float und behält dadurch große ganze Zahlen exakt. Java und C# greifen zu BigDecimal oder decimal, wenn man sie darauf konfiguriert.

Dokument

{ "id": 9007199254740993, "price": 0.1 }

Struktur und Zahlenrisiko

3 values · depth 1 · 2 distinct keys

number   2   →  number (IEEE-754 double)

JavaScript Number conversion risk (source unchanged):
  9007199254740993 → 9007199254740992

Dokument → Struktur und Zahlenrisiko

Dokument

{
  "id": 42,
  "name": "Ada"
  "active": true
}

Struktur und Zahlenrisiko

Missing comma between object key-value pairs.

Line 4, column 3

  "active": true
  ^

Welche Optionen und Sonderfälle unterstützt JSON parsen?

Technische Referenz und Optionen
ParameterTypStandardVerhalten & Sonderfälle
GrammatikRFC 8259strengKeine Kommentare, abschließenden Kommas, einfachen Anführungszeichen, unquotierten Schlüssel, NaN oder Infinity. Das sind JSON-Syntaxregeln; eine API kann zusätzlich eigene Schema-, Größen- oder Zahlengrenzen verlangen. JSON5 und JSONC werden zurückgewiesen.
Nachfolgender Inhaltabgelehnt—RFC 8259 §2 definiert ein Dokument als genau einen Wert. Zwei verkettete Objekte sind ein häufiges Symptom für eine fehlerhaft geteilte Logzeile, und sie werden gemeldet, anstatt stillschweigend beim ersten zu kürzen.
ZahlenpräzisionIEEE-754gekennzeichnetUrsprüngliche Zahlentokens werden mit ihrem dezimalen JavaScript-Number-Rundlauf verglichen. Geänderte Ganz- und Dezimalzahlen sowie Überlauf und Unterlauf werden markiert. Der Quelltext bleibt unverändert und es wird kein gerundetes Dokument exportiert.
Doppelte Schlüsseldie letzte gewinnt—RFC 8259 lässt dies undefiniert; fast jeder Parser behält das letzte Vorkommen bei, und dieser entspricht dem. Es ist zu wissen, weil es ein echter Angriffsvektor ist, wenn zwei Systeme in einer Kette nicht übereinstimmen.
__proto__Eigene Eigenschaft—Wird über defineProperty zugewiesen, sodass es zu einem normalen Schlüssel wird und nicht den Prototyp neu verweist. Entspricht JSON.parse und ist der Schutz, den die meisten manuell geschriebenen Parser vermissen.
Verschachtelungstiefeiterativkein LimitDer Parser verwendet einen expliziten Stack, sodass die Tiefe durch den Speicher und nicht durch den Aufrufstack begrenzt ist. Ein 20.000-Ebenen-Dokument ist in einem Test abgedeckt.
UnicodeUTF-8—\uXXXX-Escapes werden dekodiert, und Surrogat-Paare werden neu kombiniert, sodass Astral-Zeichen erhalten bleiben. Ein Byte-Order-Mark vor dem Root wird gemeldet, anstatt als Inhalt behandelt zu werden.
Eingabegrößebytes8 MBObergrenze für den Main-Thread. Darüber wird der Parse-Vorgang abgelehnt, anstatt versucht. Bei keiner Größe wird etwas hochgeladen.

Häufig gestellte Fragen

Wie unterscheidet sich dieses Tool vom JSON-Validator?

Der Validator konzentriert sich auf JSON-Syntaxfehler und Reparaturen. Dieser Inspektor zeigt zusätzlich Typanzahlen, Tiefe, verschiedene Schlüssel, Sprachzuordnungen und Risiken der Zahlenumwandlung. Gültiges JSON kann Zahlen enthalten, die JavaScript bei einem Rundlauf verändert; die Analyse zeigt den Originaltoken und eine gekennzeichnete Number-Vorschau, ohne das Dokument zu ändern.

Meine ID hat nach dem Parsen ihren Wert geändert. Was ist passiert?

JavaScripts natives JSON.parse verwendet IEEE-754-Zahlen und kann große IDs ohne Syntaxfehler runden: 9007199254740993 wird zu 9007199254740992. Dieser Inspektor zeigt das Risiko anhand des Originaltokens. ToolsByUs-Wertkonverter weisen Umwandlungen mit Ziffernverlust zurück; Formatierer und Minimierer erhalten den Text. Übertragen Sie exakte IDs als Zeichenfolgen oder verwenden Sie einen Parser mit beliebig großen Ganzzahlen, etwa Pythons standardmäßigen JSON-Decoder.

Was passiert bei doppelten Schlüsseln?

Das letzte Vorkommen gewinnt – was fast jeder Parser tut und was RFC 8259 sich nicht vorschreibt. Das zu wissen lohnt sich, statt es zu ignorieren: Lösen zwei Systeme in einer Request-Kette Duplikate unterschiedlich auf, kann eine Payload gegen die eine Deutung validiert und unter der anderen behandelt werden – eine echte Klasse von Sicherheitsbugs.

Warum weist es mein JSON mit Kommentaren zurück?

Weil RFC 8259 keine Kommentare kennt, und der Sinn eines strengen Parsers ist, Ihnen zu sagen, was eine API akzeptiert. Ist Ihre Datei eine Konfiguration – tsconfig.json, .eslintrc.json –, ist sie JSONC, und der JSON-Formatter akzeptiert Kommentare und Kommas am Ende und kann sie für Sie entfernen.

Ist 0.1 nach dem Parsen genau 0.1?

Nein, und das ist kein JSON-Problem – es ist binäres Fließkomma. 0.1 hat in keiner Sprache eine exakte Darstellung als Double, weshalb 0.1 + 0.2 bekanntremaßen nicht 0.3 ergibt. Bei Währung lautet die Standardantwort: ganzzahlige kleine Einheiten mitführen (Pence, Cent) oder einen Dezimalstring, niemals einen Float.

Wird mein Dokument irgendwohin gesendet?

Nein. Die Analyse läuft in Ihrem Browser, ohne das Dokument hochzuladen. Sobald diese Seite und ihre Ressourcen geladen sind, funktioniert die JSON-Analyse selbst ohne Netzwerkverbindung.