Zum Inhalt springen
BeispielWerk
English

JSON-Grenzfälle und ungültiges JSON

JSON erlaubt nur doppelte Anführungszeichen, kein NaN und keine rohen Zeilenumbrüche in Strings, doch Parser gehen mit Randfällen unterschiedlich um. Die Seite zeigt gültige Sonderfälle wie doppelte oder leere Schlüssel, die Zahl 1e999 und tiefe Verschachtelung sowie fünf bewusst ungültige Dokumente. Damit lässt sich prüfen, wie die eigene Anwendung solche Eingaben parst, begrenzt oder ablehnt.

20 Varianten auf einer Seite, jede mit eigenem Kopier- oder Download-Knopf. Darunter: 5× Absichtlich ungültig.

  • JSON mit doppeltem Schlüssel

    {"a": 1, "a": 2}

    Syntaktisch erlaubt, die Auswertung ist je Parser verschieden (letzter oder erster Wert). Testzeichenfolge für eigene Systeme.

  • JSON mit Komma am Ende (ungültig)Absichtlich ungültig

    {"a": 1,}

    In JSON unzulässig, in JavaScript-Objekten erlaubt. Testzeichenfolge für eigene Systeme.

  • JSON mit einfachen Anführungszeichen (ungültig)Absichtlich ungültig

    {'a': 'b'}

    JSON erlaubt nur doppelte Anführungszeichen. Testzeichenfolge für eigene Systeme.

  • JSON mit Kommentar (ungültig)Absichtlich ungültig

    {"a": 1 /* Hinweis */}

    Kommentare sind in JSON nicht erlaubt (JSONC/JSON5 schon). Testzeichenfolge für eigene Systeme.

  • JSON mit NaN (ungültig)Absichtlich ungültig

    {"a": NaN}

    NaN und Infinity sind kein JSON. Testzeichenfolge für eigene Systeme.

  • JSON mit Zahl über 2^53

    {"id": 9007199254740993}

    Gültig; JavaScript liest 9007199254740992. Testzeichenfolge für eigene Systeme.

  • JSON mit Zahl 1e999

    {"a": 1e999}

    Gültige Syntax; wird zu Infinity oder Fehler. Testzeichenfolge für eigene Systeme.

  • JSON mit -0

    {"a": -0}

    Gültig; JSON.parse liefert -0. Testzeichenfolge für eigene Systeme.

  • JSON mit leerem Schlüssel

    {"": "leer"}

    Gültig; oft nicht bedacht. Testzeichenfolge für eigene Systeme.

  • JSON mit Unicode-Escapes

    {"text": "\u00e4\u00f6\u00fc 😀"}

    Escapes für äöü und ein Surrogatpaar (😀). Testzeichenfolge für eigene Systeme.

  • JSON mit rohem Zeilenumbruch im String (ungültig)Absichtlich ungültig

    {"a": "Zeile 1
    Zeile 2"}

    Steuerzeichen müssen in Strings als \n maskiert sein. Testzeichenfolge für eigene Systeme.

  • JSON mit __proto__-Schlüssel

    {"__proto__": {"admin": true}}

    Prüft, ob unsicheres Mergen Prototypen verändert. Testzeichenfolge für eigene Systeme.

  • JSON mit constructor.prototype

    {"constructor": {"prototype": {"x": 1}}}

    Zweite Variante der Prototype-Pollution-Probe. Testzeichenfolge für eigene Systeme.

  • JSON mit 100 Verschachtelungsebenen

    [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

    100 offene und geschlossene Klammern; Parser mit Tiefenlimit lehnen es ab. Testzeichenfolge für eigene Systeme.

  • JSON mit 1000 Verschachtelungsebenen

    [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ …

    Kann Stack-Limits sprengen. Testzeichenfolge für eigene Systeme.

  • JSON mit BOM am Anfang

    {"a": 1}

    RFC 8259 untersagt das Voranstellen eines BOM; manche Parser lehnen ihn ab. UTF-16: 9, Codepoints: 9, UTF-8: 11 Bytes. Testzeichenfolge für eigene Systeme.

  • JSON, das nur aus einem String besteht

    "Hallo"

    Seit RFC 7159 gültig; ältere Parser verlangten Objekt oder Array. Testzeichenfolge für eigene Systeme.

  • Leeres JSON-Objekt und Array

    {}
    []

    Zwei kleinste gültige Objekte, je Zeile. Testzeichenfolge für eigene Systeme.

  • JSON als String in JSON

    {"daten": "{\"a\": 1}"}

    Doppelt kodiert: der Wert ist selbst JSON-Text. Testzeichenfolge für eigene Systeme.

  • JSON mit 400-stelliger Zahl

    {"n": 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 …

    Gültige Syntax; überschreitet jeden Zahlentyp. Testzeichenfolge für eigene Systeme.

Weitere Themen in Sonderzeichen & Grenzfälle