JSON.isRawJSON() ist eine ES2024-Methode, die prüft, ob ein beliebiger Wert ein durch JSON.rawJSON() erzeugter Raw-JSON-Marker ist. Sie liefert true oder false und ist die einzige zuverlässige Möglichkeit, echte Raw-JSON-Objekte von normalen Objekten mit identischer Form zu unterscheiden. Typische Einsatzgebiete sind Replacer-Funktionen in JSON.stringify() oder defensive Pipelines, die fremde Daten verarbeiten.
Ein Raw-JSON-Objekt sieht von außen aus wie { rawJSON: "42" } - es hat exakt eine eigene Eigenschaft rawJSON mit einem String. Genau diese Form lässt sich aber trivial nachbauen, ohne dass JSON.stringify() das Objekt entsprechend behandeln würde. JSON.isRawJSON() umgeht dieses Problem, indem es ein internes Slot des Objekts prüft, das nur JSON.rawJSON() setzt.
Hinweis: JSON.isRawJSON() ist seit ES2024 spezifiziert und korrespondiert eng mit JSON.rawJSON(). Beide Methoden sind in modernen Engines (Node.js ≥ 21.7, Chromium ≥ 114, Safari ≥ 17.4) verfügbar.
Syntax
JSON.isRawJSON(value)value Ein beliebiger Wert. Es können Primitive, Objekte, Arrays oder null übergeben werden - die Methode wirft niemals einen Fehler.
Rückgabewert: true, wenn value ein durch JSON.rawJSON() erzeugtes Objekt ist, sonst false.
Grundlegende Beispiele
Beispiel - Echtes Raw-JSON erkennen
const raw = JSON.rawJSON("42");
console.log(JSON.isRawJSON(raw)); // true
console.log(raw.rawJSON); // "42"true
42Beispiel - Abgrenzung zu nachgebildeten Objekten
Ein selbstgebautes Objekt mit gleicher Form wird nicht als Raw-JSON erkannt:
const fake = { rawJSON: "42" };
console.log(JSON.isRawJSON(fake)); // false
// Beweis: stringify behandelt fake als ganz normales Objekt
console.log(JSON.stringify(fake));
console.log(JSON.stringify(JSON.rawJSON("42")));false
{"rawJSON":"42"}
42Beispiel - Verschiedene Eingabetypen
JSON.isRawJSON() toleriert beliebige Eingaben und liefert für alle Nicht-Raw-Werte false:
console.log(JSON.isRawJSON(null)); // false
console.log(JSON.isRawJSON(undefined)); // false
console.log(JSON.isRawJSON(42)); // false
console.log(JSON.isRawJSON("42")); // false
console.log(JSON.isRawJSON([])); // false
console.log(JSON.isRawJSON({})); // false
console.log(JSON.isRawJSON(JSON.rawJSON("true"))); // truefalse
false
false
false
false
false
trueAnwendungsfall: Replacer-Funktion
Beim Serialisieren mit Replacer-Funktion wird jeder Wert vor der Ausgabe durch die Funktion geleitet. Hier ist es wichtig, Raw-JSON-Werte unverändert durchzulassen, sonst geht die spezielle Markierung verloren:
const data = {
name: "Michael",
id: JSON.rawJSON("9007199254740993"),
password: "secret",
};
const result = JSON.stringify(data, (key, value) => {
// Raw-JSON unangetastet lassen
if (JSON.isRawJSON(value)) return value;
// Sensible Felder filtern
if (key === "password") return undefined;
return value;
});
console.log(result);{"name":"Michael","id":9007199254740993}Ohne den JSON.isRawJSON()-Check würde der Replacer das Raw-Objekt versehentlich wie ein normales Objekt durchreichen - was zwar in vielen Fällen gut geht, in komplexeren Replacer-Logiken (etwa Typkonvertierungen, Datums-Formatierung) aber leicht zu Fehlern führt.
Anwendungsfall: Defensive Validierung
In Pipelines, in denen Werte aus mehreren Quellen zusammenfließen, hilft JSON.isRawJSON() bei der Typunterscheidung zwischen vorbereiteten Raw-Werten und gewöhnlichen Datenstrukturen:
function describe(value) {
if (JSON.isRawJSON(value)) {
return `Raw-JSON: ${value.rawJSON}`;
}
if (Array.isArray(value)) {
return `Array (${value.length})`;
}
if (value === null) return "null";
return typeof value;
}
console.log(describe(JSON.rawJSON("123")));
console.log(describe([1, 2, 3]));
console.log(describe({ a: 1 }));
console.log(describe("hi"));Raw-JSON: 123
Array (3)
object
stringVerwandte Themen
JSON.rawJSON()- erzeugt die Raw-JSON-Objekte, die mit dieser Methode erkannt werden.JSON.stringify()- der Serialisierer, der Raw-JSON-Objekte unverändert in die Ausgabe übernimmt.JSON.parse()- das Gegenstück zum Stringifyen, ohne direkten Bezug zu Raw-JSON.