Signatur
Beschreibung
JSON.isRawJSON() ist eine statische Methode des globalen JSON-Objekts. Sie stellt fest, ob ein Wert ein Raw-JSON-Objekt ist, also ein Objekt, das JSON.rawJSON() erzeugt hat. Solche Objekte übernimmt JSON.stringify() unverändert als JSON-Quelltext in die Ausgabe. Dadurch lassen sich zum Beispiel sehr große Ganzzahlen (BigInt) oder Dezimalzahlen mit hoher Genauigkeit ohne Rundungsverlust serialisieren.
Die Prüfung ist zuverlässig: Intern wird ein verstecktes Merkmal (Internal Slot [[IsRawJSON]]) abgefragt. Ein gewöhnliches Objekt wie { rawJSON: "123" } besteht die Prüfung daher nicht, obwohl es genauso aussieht. Echte Raw-JSON-Objekte sind außerdem eingefroren (Object.isFrozen() liefert true) und haben den Prototyp null.
Gebraucht wird die Methode vor allem in eigenen replacer-Funktionen, Serialisierungsbibliotheken oder Hilfsfunktionen. Dort muss man Raw-JSON-Werte von normalen Werten unterscheiden, etwa um sie nicht noch einmal umzuwandeln oder um sie beim Logging gesondert zu behandeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | any | Der Wert, der geprüft werden soll. Das kann ein beliebiger Wert sein, auch ein primitiver Wert, null oder undefined. |
Beispiele
Echtes Raw-JSON von einem nachgebauten Objekt unterscheiden
const raw = JSON.rawJSON("12345678901234567890");
const fake = { rawJSON: "12345678901234567890" };
console.log(JSON.isRawJSON(raw)); // echtes Raw-JSON-Objekt
console.log(JSON.isRawJSON(fake)); // nur gleich aufgebaut
console.log(JSON.isRawJSON("42")); // primitiver String
console.log(Object.isFrozen(raw), Object.getPrototypeOf(raw));
BigInt verlustfrei serialisieren und im Replacer prüfen
const order = { id: 9007199254740993n, total: 19.99 };
const json = JSON.stringify(order, (key, value) => {
// BigInt in Raw-JSON umwandeln, damit keine Genauigkeit verloren geht
if (typeof value === "bigint") return JSON.rawJSON(value.toString());
return value;
});
console.log(json);
Hilfsfunktion für Logging mit Feature-Erkennung
const supportsRawJSON = typeof JSON.isRawJSON === "function";
const describe = (value) => {
if (supportsRawJSON && JSON.isRawJSON(value)) {
return `RawJSON(${value.rawJSON})`;
}
return String(value);
};
console.log(describe(JSON.rawJSON("1e1000")));
console.log(describe(123));
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Methode ist relativ neu (Chrome/Edge 114+, Firefox 135+, Safari 18.4+, Node.js 21+). In älteren Umgebungen gibt es sie nicht, deshalb vorher mit
typeof JSON.isRawJSON === "function"prüfen. Ein vollständiges Polyfill ist nicht möglich, weil der interne Slot nicht nachgebaut werden kann. - Nicht durch Duck-Typing ersetzbar: Eine Prüfung wie
"rawJSON" in valueerkennt auch nachgebaute Objekte. NurJSON.isRawJSON()ist wirklich verlässlich. JSON.rawJSON()akzeptiert nur primitiven JSON-Text (Zahl, String,true,false,null). Bei Objekten, Arrays oder Text mit Leerzeichen am Anfang oder Ende wirft es einenSyntaxError.- Raw-JSON-Objekte sind eingefroren. Die Eigenschaft
rawJSONkann also nachträglich nicht geändert werden.