Limited availability
Die JSON.rawJSON()
statische Methode erstellt ein "rohes JSON"-Objekt, das ein Stück JSON-Text enthält. Wenn es zu JSON serialisiert wird, wird das rohe JSON-Objekt so behandelt, als wäre es bereits ein JSON-Stück. Dieser Text muss gültiges JSON sein.
string
Der JSON-Text. Muss ein gültiges JSON darstellend einen primitiven Wert sein.
Ein Objekt, das verwendet werden kann, um JSON-Text mit dem exakt gleichen Inhalt wie der bereitgestellte string
zu erstellen, ohne Anführungszeichen um den String selbst. Dieses Objekt hat null
Prototype und ist eingefroren (daher wird es niemals versehentlich als reguläres Objekt durch eine Art primitivem Konvertierung serialisiert) und hat die folgende Eigenschaft:
rawJSON
Der ursprüngliche JSON-string
, der bereitgestellt wurde.
Darüber hinaus hat es ein privates Feld, das sich selbst als rohes JSON-Objekt kennzeichnet. Dies ermöglicht es JSON.stringify()
und JSON.isRawJSON()
, es zu identifizieren.
SyntaxError
Wird ausgelöst, wenn der string
kein gültiges JSON ist oder wenn er ein Objekt oder Array darstellt.
Ein rohes JSON-Objekt kann als eine unveränderliche, atomare Datenstruktur angesehen werden wie jede Art von Primitive. Es ist kein reguläres Objekt und enthält keine anderen Daten als den rohen JSON-Text. Es wird verwendet, um Daten zu âvoraus-zu-serialisierenâ in Formate, die JSON.stringify
selbst aus verschiedenen Gründen nicht erzeugen kann. Der typischste Anwendungsfall ist das Problem des Verlusts der Genauigkeit bei Gleitkommazahlen. Zum Beispiel:
JSON.stringify({ value: 12345678901234567890 });
// {"value":12345678901234567000}
Der Wert ist nicht mehr genau gleichwertig mit der ursprünglichen Zahl! Dies liegt daran, dass JavaScript für alle Zahlen die Gleitkommadarstellung verwendet, sodass es nicht alle Ganzzahlen exakt darstellen kann. Das Zahlenliteral 12345678901234567890
selbst wird bereits auf die nächstliegende darstellbare Zahl gerundet, wenn es von JavaScript geparst wird.
Ohne JSON.rawJSON
gibt es keine Möglichkeit, JSON.stringify
anzuweisen, das Zahlenliteral 12345678901234567890
zu erzeugen, da es schlichtweg keinen entsprechenden JavaScript-Zahlenwert gibt. Mit rohem JSON können Sie JSON.stringify()
direkt mitteilen, wie ein bestimmter Wert als String serialisiert werden soll:
const rawJSON = JSON.rawJSON("12345678901234567890");
JSON.stringify({ value: rawJSON });
// {"value":12345678901234567890}
Ein vollständigeres Beispiel dafür finden Sie unter Verlustfreie Zahlenspeicherung.
Beachten Sie, dass obwohl wir einen String zu JSON.rawJSON()
übergeben haben, wird er dennoch im finalen JSON zu einer Zahl. Dies liegt daran, dass der String den wörtlichen JSON-Text darstellt. Wenn Sie einen String serialisieren möchten, sollten Sie JSON.rawJSON()
mit einem in Anführungszeichen eingeschlossenen Stringwert verwenden:
const rawJSON = JSON.rawJSON('"Hello world"');
JSON.stringify({ value: rawJSON });
// {"value":"Hello world"}
JSON.rawJSON
erlaubt Ihnen, beliebigen JSON-Text einzufügen, erlaubt es jedoch nicht, ungültiges JSON zu erstellen. Alles, was durch die JSON-Syntax nicht erlaubt ist, ist auch durch JSON.rawJSON()
nicht erlaubt:
const rawJSON = JSON.rawJSON('"Hello\nworld"'); // Syntax error, because line breaks are not allowed in JSON strings
Darüber hinaus können Sie JSON.rawJSON()
nicht verwenden, um JSON-Objekte oder Arrays zu erstellen.
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}
Allerdings können Sie JSON.rawJSON()
nicht verwenden, um JSON-Objekte oder Arrays zu erstellen:
const arrJSON = JSON.rawJSON("[1, 2, 3]");
const objJSON = JSON.rawJSON('{"a": 1, "b": 2}');
// SyntaxError
Verwendung von JSON.rawJSON(), um maskierte Zeichenfolgenliterale zu erstellen
Abgesehen von Zahlen gibt es nur einen weiteren Typ, der keine eins-zu-eins Entsprechung zwischen JavaScript-Werten und JSON-Text hat: Strings. Wenn Strings zu JSON serialisiert werden, werden alle Codepunkte, auÃer denen, die in JSON-Stringliteralen nicht legal sind (wie Zeilenumbrüche), wörtlich ausgegeben:
console.log(JSON.stringify({ value: "\ud83d\ude04" })); // {"value":"ð"}
Dies ist möglicherweise nicht wünschenswert, da der Empfänger dieses Strings Unicode möglicherweise unterschiedlich behandelt. Um die Interoperabilität zu verbessern, können Sie den zu serialisierenden String explizit 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 im rawJSON
tatsächlich ein einzelnes Backslash-Zeichen darstellen.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4