JSON.rawJSON()
Baseline 2025>
Neu verfügbar
Seit März 2025 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.
Die statische Methode JSON.rawJSON() erstellt ein „Raw-JSON-Objekt“, das einen JSON-Text enthält. Bei der Serialisierung in JSON wird das Raw-JSON-Objekt so behandelt, als wäre es bereits JSON-Text. Dieser Text muss gültiges JSON sein.
Syntax
JSON.rawJSON(string)
Parameter
string-
Der JSON-Text. Er muss gültiges JSON sein, das einen primitiven Wert darstellt.
Rückgabewert
Ein Objekt, mit dem sich JSON-Text erstellen lässt, dessen Inhalt exakt dem übergebenen string entspricht, ohne Anführungszeichen um die Zeichenfolge selbst. Dieses Objekt hat einen null-Prototyp und ist eingefroren (damit es bei einer Umwandlung in einen primitiven Wert nicht versehentlich als gewöhnliches Objekt serialisiert wird). Es besitzt die folgende Eigenschaft:
rawJSON-
Der ursprünglich übergebene JSON-
string.
Außerdem besitzt es ein privates Feld, das es als Raw-JSON-Objekt kennzeichnet. Dadurch können JSON.stringify() und JSON.isRawJSON() es erkennen.
Ausnahmen
SyntaxError-
Wird ausgelöst, wenn
stringkein gültiges JSON ist oder ein Objekt oder Array darstellt.
Beschreibung
Ein Raw-JSON-Objekt kann als unveränderliche, atomare Datenstruktur betrachtet werden, ähnlich einem primitiven Wert. Es ist kein gewöhnliches Objekt und enthält außer dem Raw-JSON-Text keine Daten. Es wird verwendet, um Daten vorab in Formate zu serialisieren, die JSON.stringify aus verschiedenen Gründen selbst nicht erzeugen kann. Der häufigste Anwendungsfall ist der Verlust an Genauigkeit bei Gleitkommazahlen. Zum Beispiel:
JSON.stringify({ value: 12345678901234567890 });
// {"value":12345678901234567000}
Der Wert entspricht nicht mehr exakt der ursprünglichen Zahl! Das liegt daran, dass JavaScript für alle Zahlen eine Gleitkommadarstellung verwendet und daher nicht alle Ganzzahlen exakt darstellen kann. Schon das Zahlenliteral 12345678901234567890 wird beim Parsen durch JavaScript auf die nächstliegende darstellbare Zahl gerundet.
Ohne JSON.rawJSON gibt es keine Möglichkeit, JSON.stringify zur Ausgabe des Zahlenliterals 12345678901234567890 zu veranlassen, da kein entsprechender JavaScript-Zahlenwert existiert. Mit Raw-JSON können Sie JSON.stringify() direkt vorgeben, als welcher Text ein bestimmter Wert serialisiert werden soll:
const rawJSON = JSON.rawJSON("12345678901234567890");
JSON.stringify({ value: rawJSON });
// {"value":12345678901234567890}
Ein ausführlicheres Beispiel dazu finden Sie unter Verlustfreie Serialisierung von Zahlen.
Beachten Sie: Obwohl wir eine Zeichenfolge an JSON.rawJSON() übergeben haben, wird daraus im endgültigen JSON eine Zahl. Das liegt daran, dass die Zeichenfolge den JSON-Text wortgetreu darstellt. Wenn Sie eine Zeichenfolge serialisieren möchten, sollten Sie JSON.rawJSON() einen in Anführungszeichen eingeschlossenen Zeichenfolgenwert übergeben:
const rawJSON = JSON.rawJSON('"Hello world"');
JSON.stringify({ value: rawJSON });
// {"value":"Hello world"}
Mit JSON.rawJSON können Sie beliebigen JSON-Text einfügen, aber kein ungültiges JSON erzeugen. Was die JSON-Syntax nicht erlaubt, erlaubt auch JSON.rawJSON() nicht:
const rawJSON = JSON.rawJSON('"Hello\nworld"'); // Syntax error, because line breaks are not allowed in JSON strings
Außerdem können Sie mit JSON.rawJSON() keine JSON-Objekte oder -Arrays erstellen.
Beispiele
>JSON.rawJSON() zum Erstellen von JSON-Ausdrücken verschiedener Typen verwenden
const numJSON = JSON.rawJSON("123");
const strJSON = JSON.rawJSON('"Hello world"');
const boolJSON = JSON.rawJSON("true");
const nullJSON = JSON.rawJSON("null");
console.log(
JSON.stringify({
age: numJSON,
message: strJSON,
isActive: boolJSON,
nothing: nullJSON,
}),
);
// {"age":123,"message":"Hello world","isActive":true,"nothing":null}
Sie können mit JSON.rawJSON() jedoch keine JSON-Objekte oder -Arrays erstellen:
const arrJSON = JSON.rawJSON("[1, 2, 3]");
const objJSON = JSON.rawJSON('{"a": 1, "b": 2}');
// SyntaxError
JSON.rawJSON() zum Erstellen von Zeichenfolgenliteralen mit Escape-Sequenzen verwenden
Neben Zahlen gibt es nur einen weiteren Typ, bei dem JavaScript-Werte und JSON-Text einander nicht eindeutig entsprechen: Zeichenfolgen. Wenn Zeichenfolgen in JSON serialisiert werden, werden alle Codepunkte wörtlich ausgegeben, außer denen, die in JSON-Zeichenfolgenliteralen nicht zulässig sind (etwa Zeilenumbrüche):
console.log(JSON.stringify({ value: "\ud83d\ude04" })); // {"value":"😄"}
Das ist möglicherweise unerwünscht, da der Empfänger dieser Zeichenfolge Unicode anders verarbeiten könnte. Um die Interoperabilität zu verbessern, können Sie die zu serialisierende Zeichenfolge ausdrücklich mit Escape-Sequenzen angeben:
const rawJSON = JSON.rawJSON('"\\ud83d\\ude04"');
const objStr = JSON.stringify({ value: rawJSON });
console.log(objStr); // {"value":"\ud83d\ude04"}
console.log(JSON.parse(objStr).value); // 😄
Beachten Sie, dass die doppelten Backslashes in rawJSON tatsächlich jeweils ein einzelnes Backslash-Zeichen darstellen.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-json.rawjson> |