JSON Stringify / Unstringify
Kodieren Sie ein JSON-Objekt in ein einzeiliges, escapetes String-Literal zum Einbetten in Code, oder dekodieren Sie einen escapeten JSON-String zurück in lesbares JSON.
1.019 Aufrufe
Wie es funktioniert
Stringify nimmt echtes JSON und wandelt es in ein einzeiliges, anführungszeichen-escapetes String-Literal um — die Form, die Sie benötigen, um JSON in ein anderes JSON-Feld, einen Konfigurationswert oder eine String-Konstante im Quellcode einzubetten. Intern macht dies genau das, was JavaScripts JSON.stringify() tut: Es durchläuft den Wert, setzt Strings in Anführungszeichen, escapet Steuerzeichen und eingebettete Anführungszeichen und serialisiert Objekte und Arrays zu Text. Unstringify kehrt das um: Fügen Sie einen escapeten JSON-String ein (mit \" und \n) und erhalten Sie sauberes, lesbares, eingerücktes JSON zurück — gleichbedeutend damit, JSON.parse() darauf anzuwenden und das Ergebnis übersichtlich zu formatieren.
Konkretes Beispiel: Das Objekt {"name":"Ada","tags":["a","b"]} wird zum Literal "{\"name\":\"Ada\",\"tags\":[\"a\",\"b\"]}" — vor jedes innere doppelte Anführungszeichen wird ein Backslash gesetzt, damit das Ganze innerhalb eines äußeren Anführungszeichenpaares stehen kann. Genau das passiert, wenn eine API eine JSON-Nutzlast als String in einer anderen JSON-Antwort verpackt (ein Webhook-Body, eine Log-Zeile, eine als Text typisierte Datenbankspalte), oder wenn ein JSON-Wert in eine YAML-Datei, eine Umgebungsvariable oder eine String-Konstante im Quellcode eingefügt werden muss, ohne die umgebende Syntax zu brechen. Unstringify macht das Gegenteil: Fügen Sie diesen escapeten Klumpen ein und erhalten Sie das Original zurück, eingerückt und lesbar.
Ein paar Verhaltensweisen von JSON.stringify() sind wissenswert, auch wenn Sie nie genau dieses Tool anfassen: undefined-Werte und Funktionen werden stillschweigend aus Objekteigenschaften entfernt (ein Schlüssel mit dem Wert undefined verschwindet einfach), aber dieselben Werte innerhalb eines Arrays werden zu null statt entfernt, da Arrays ihre Länge und Indexpositionen intakt halten müssen. Date-Objekte werden nicht als Objekte serialisiert — sie werden über ihre toJSON()-Methode in einen ISO-8601-String wie "2024-01-15T10:30:00.000Z" umgewandelt. Und ein Wert, der eine zirkuläre Referenz enthält — ein Objekt, das (direkt oder über eine Kette von Eigenschaften) auf sich selbst zurückverweist — lässt sich überhaupt nicht stringifizieren: Das echte JSON.stringify() wirft einen TypeError: Converting circular structure to JSON, weil es keinen endlichen String geben kann, der eine unendlich verschachtelte Struktur darstellt.
Was Sie wissen sollten
Stringify ist in einem bestimmten Sinn verlustbehaftet: Was stillschweigend entfernt wird (Funktionen, undefined-Eigenschaften, Symbol-Schlüssel), lässt sich anschließend durch Unstringify nicht wiederherstellen — der Rückweg bewahrt nur das, was gültiges JSON überhaupt darstellen kann, also Strings, Zahlen, Booleans, null, einfache Objekte und Arrays. Im echten Code akzeptiert JSON.stringify() außerdem zwei zusätzliche Argumente über den Wert selbst hinaus: einen replacer (eine Funktion oder ein Array von Schlüsselnamen, das genau steuert, welche Eigenschaften einbezogen werden oder wie ihre Werte vor der Serialisierung transformiert werden), und einen space-Parameter (eine Zahl oder ein String, der die kompakte einzeilige Ausgabe in eingerücktes, gut lesbares JSON verwandelt — genau das ist der Unterschied zwischen einer minifizierten API-Antwort und der übersichtlich formatierten Version, die Ihnen ein Debugger zeigt).
Doppelt kodiertes JSON ist eine häufige Quelle der Verwirrung: Wenn ein Wert wie ein JSON-String aussieht, aber sein allererstes Zeichen ein Anführungszeichen ist und er voller Backslash-escapeter innerer Anführungszeichen steckt, wurde er wahrscheinlich zweimal stringifiziert — einmal von der Anwendung, ein weiteres Mal von einer Schicht, die nicht erkannt hat, dass die Nutzlast bereits ein JSON-String war. Einmal durch Unstringify laufen lassen löst die äußere Schicht auf; sieht das Ergebnis immer noch escapet aus, führen Sie es erneut aus.
Häufig gestellte Fragen
Was ist der Unterschied zu JSON.stringify im Code?
Die gleiche Operation, nur als interaktives Tool: Fügen Sie echtes JSON ein und erhalten Sie die escapete String-Form, die Sie andernfalls mit JSON.stringify(obj) erzeugen würden — nützlich, wenn keine Konsole zur Hand ist.
Warum müsste ich JSON entstringifizieren?
APIs und Logs verschachteln manchmal einen JSON-String innerhalb eines JSON-Felds (doppelt kodiertes JSON) — Unstringify wandelt diesen inneren escapeten String zurück in lesbares, parsbares JSON um.
Warum ist eine Eigenschaft nach dem Stringify verschwunden?
JSON.stringify() lässt Objekteigenschaften, deren Wert undefined oder eine Funktion ist, stillschweigend aus — für keines von beiden gibt es eine JSON-Darstellung, daher wird der Schlüssel vollständig entfernt statt als null serialisiert. Derselbe undefined-Wert innerhalb eines Arrays wird zu null statt zu verschwinden, da Arrays ihre Länge und Indexreihenfolge bewahren müssen.
Warum erhalte ich einen Fehler wegen "zirkulärer Struktur"?
Wenn ein Objekt direkt oder über eine Kette anderer Objekte auf sich selbst verweist, kann JSON.stringify() dafür keinen endlichen String erzeugen und wirft einen TypeError. Das kommt häufig vor, wenn Objekte serialisiert werden, die eine Rückreferenz zu ihrem übergeordneten Element halten (ein Kindknoten, der auf seinen Baum zurückzeigt, ein DOM-Element, eine Klasseninstanz mit einem "self"-Feld) — die Lösung besteht darin, die zirkuläre Eigenschaft vor der Serialisierung zu entfernen oder zu ersetzen, oft mit einer replacer-Funktion.
Werden meine Daten hochgeladen?
Nein — beide Richtungen laufen lokal in Ihrem Browser.
Ähnliche Tools
Problem melden
JSON Stringify / Unstringify
Kommentare
Noch keine Kommentare — schreiben Sie den ersten!