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

JavaScript Syntax
JSON.isRawJSON(value)
Parameter
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

JavaScript Beispiel
const raw = JSON.rawJSON("42");

console.log(JSON.isRawJSON(raw));   // true
console.log(raw.rawJSON);           // "42"
Output
true
42

Beispiel - Abgrenzung zu nachgebildeten Objekten

Ein selbstgebautes Objekt mit gleicher Form wird nicht als Raw-JSON erkannt:

JavaScript Beispiel
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")));
Output
false
{"rawJSON":"42"}
42

Beispiel - Verschiedene Eingabetypen

JSON.isRawJSON() toleriert beliebige Eingaben und liefert für alle Nicht-Raw-Werte false:

JavaScript Beispiel
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"))); // true
Output
false
false
false
false
false
false
true

Anwendungsfall: 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:

JavaScript Beispiel
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);
Output
{"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:

JavaScript Beispiel
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"));
Output
Raw-JSON: 123
Array (3)
object
string

Verwandte 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.
/ Weiter

Zurück zu JSON

Zur Übersicht