Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die statische Methode JSON.parse() analysiert einen JSON-String und konstruiert den durch den String beschriebenen JavaScript-Wert oder das Objekt. Es kann eine optionale reviver-Funktion bereitgestellt werden, um eine Transformation des resultierenden Objekts durchzuführen, bevor es zurückgegeben wird.
Der String, der als JSON analysiert werden soll. Siehe das JSON-Objekt für eine Beschreibung der JSON-Syntax.
reviver OptionalWenn es sich um eine Funktion handelt, legt diese fest, wie jeder Wert, der ursprünglich durch das Parsen erzeugt wurde, vor der Rückgabe transformiert wird. Nicht-aufrufbare Werte werden ignoriert. Die Funktion wird mit den folgenden Argumenten aufgerufen:
keyDer Schlüssel, der mit dem Wert verknüpft ist.
valueDer durch das Parsen erzeugte Wert.
context OptionalEin Kontextobjekt, das den Status enthält, der für den aktuellen Ausdruck relevant ist, der wiederbelebt wird. Es ist ein neues Objekt für jeden Aufruf der Reviver-Funktion. Es wird nur beim Wiederbeleben primitiver Werte übergeben, jedoch nicht, wenn value ein Objekt oder Array ist. Es enthält folgende Eigenschaft:
sourceDer ursprüngliche JSON-String, der diesen Wert darstellt.
Der Object, Array, String, die Zahl, der Boolean oder der null-Wert, der dem gegebenen JSON-text entspricht.
Wird ausgelöst, wenn der zu parsende String kein gültiges JSON ist.
JSON.parse() analysiert einen JSON-String entsprechend der JSON-Grammatik und bewertet den String, als ob er ein JavaScript-Ausdruck wäre. Der einzige Fall, in dem ein JSON-Text einen anderen Wert darstellt als der gleiche JavaScript-Ausdruck, tritt bei dem Schlüssel "__proto__" auf — siehe Objektliteral-Syntax vs. JSON.
Wenn ein reviver angegeben ist, wird der durch das Parsen berechnete Wert transformiert, bevor er zurückgegeben wird. Insbesondere werden der berechnete Wert und alle seine Eigenschaften (in einer Tiefensuche beginnend mit den am tiefsten verschachtelten Eigenschaften weiter zur ursprünglichen Wert selbst) einzeln durch den reviver geführt.
Der reviver wird mit dem Objekt aufgerufen, das die zu verarbeitende Eigenschaft enthält, als this (es sei denn, Sie definieren den reviver als Arrow-Funktion, in diesem Fall gibt es keine separate this-Bindung) und zwei Argumenten: key und value, die den Eigenschaftsnamen als String (auch für Arrays) und den Eigenschaftswert darstellen. Für primitive Werte wird ein zusätzlicher context-Parameter übergeben, der den Quelltext dieses Wertes enthält. Wenn die reviver-Funktion undefined zurückgibt (oder keinen Wert zurückgibt — zum Beispiel, wenn die Ausführung am Ende der Funktion endet), wird die Eigenschaft aus dem Objekt gelöscht. Andernfalls wird die Eigenschaft neu definiert, um der Rückgabewert zu sein. Wenn der reviver nur einige Werte transformiert und andere nicht, sollten alle untransformierten Werte unverändert zurückgegeben werden — andernfalls werden sie aus dem resultierenden Objekt gelöscht.
Ähnlich wie beim replacer-Parameter von JSON.stringify() wird reviver bei Arrays und Objekten zuletzt auf den Wurzelwert mit einem leeren String als key und dem Wurzelobjekt als value aufgerufen. Für andere gültige JSON-Werte funktioniert reviver ähnlich und wird einmal mit einem leeren String als key und dem Wert selbst als value aufgerufen.
Wenn Sie einen anderen Wert von reviver zurückgeben, ersetzt dieser Wert den ursprünglich geparsten Wert vollständig. Dies gilt auch für den Wurzelwert. Ein Beispiel:
Es gibt keine generische Möglichkeit, dies zu umgehen. Sie können den Fall, bei dem key ein leerer String ist, nicht speziell behandeln, da JSON-Objekte auch Schlüssel haben können, die leere Strings sind. Sie müssen sehr genau wissen, welche Art von Transformation für jeden Schlüssel erforderlich ist, wenn Sie den Reviver implementieren.
Beachten Sie, dass reviver ausgeführt wird, nachdem der Wert geparst wurde. So werden beispielsweise Zahlen im JSON-Text bereits in JavaScript-Zahlen konvertiert und können dabei an Genauigkeit verlieren. Eine Möglichkeit, große Zahlen ohne Genauigkeitsverlust zu übertragen, ist, sie als Strings zu serialisieren und sie in BigInts oder andere geeignete Formate mit beliebiger Genauigkeit wiederzubeleben.
Sie können auch die Eigenschaft context.source verwenden, um auf den ursprünglichen JSON-Quelltext zuzugreifen, der den Wert darstellt, wie unten gezeigt:
Damit ein Wert ordnungsgemäß "round-tript" (d.h. er wird auf das gleiche ursprüngliche Objekt deserialisiert), muss der Serialisierungsprozess die Typinformationen beibehalten. Beispielsweise können Sie hierfür den replacer-Parameter von JSON.stringify() verwenden:
Da JSON keinen syntaktischen Raum zur Annotation von Typ-Metadaten hat, müssen Sie eine der folgenden Möglichkeiten in Betracht ziehen, um Werte zu beleben, die keine einfachen Objekte sind:
Wenn JSON.parse einen String erhält, der nicht der JSON-Grammatik entspricht, wird eine SyntaxError-Ausnahme ausgelöst.
Arrays und Objekte dürfen in JSON keine nachgestellten Kommata haben:
JSON-Strings müssen durch doppelte (nicht einfache) Anführungszeichen begrenzt werden:
Wenn Sie JSON in einem JavaScript-Stringliteral schreiben, sollten Sie entweder einfache Anführungszeichen verwenden, um das JavaScript-Stringliteral zu begrenzen, oder die doppelten Anführungszeichen, die das JSON-String begrenzen, maskieren:
| ECMAScript® 2027 Language Specification # sec-json.parse |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.