Start · Sprachen · JavaScript · Referenz · JSON.isRawJSON()

JSON.isRawJSON()

Methode

Prüft, ob ein Wert ein von <code>JSON.rawJSON()</code> erzeugtes Raw-JSON-Objekt ist, und gibt <code>true</code> oder <code>false</code> zurück.

seit JavaScript ES2025 (JSON.parse source text access); Chrome 114 Kategorie: method-property

Signatur

JSON.isRawJSON(value)

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));
true false false true null

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);
{"id":9007199254740993,"total":19.99}

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));
RawJSON(1e1000) 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 value erkennt auch nachgebaute Objekte. Nur JSON.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 einen SyntaxError.
  • Raw-JSON-Objekte sind eingefroren. Die Eigenschaft rawJSON kann also nachträglich nicht geändert werden.