JSON.isRawJSON()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Die statische Methode JSON.isRawJSON() prüft, ob ein Wert ein von JSON.rawJSON() zurückgegebenes Objekt ist.

Syntax

js
JSON.isRawJSON(value)

Parameter

value

Der zu testende Wert.

Rückgabewert

true, wenn value durch JSON.rawJSON() erstellt wurde; andernfalls false.

Beschreibung

"Raw JSON"-Objekte werden bei der Serialisierung zu JSON so behandelt, als wären sie bereits ein Stück JSON. Darüber hinaus ist das rohe JSON aufgrund der Funktionsweise von JSON.rawJSON() garantiert syntaktisch gültiges JSON. Weitere Informationen zur Form und zum Verhalten von Raw JSON-Objekten finden Sie unter JSON.rawJSON(). Diese Methode existiert, um es anderen Serialisierungsbibliotheken zu ermöglichen, ein ähnliches Verhalten wie JSON.stringify() für Raw JSON-Objekte zu implementieren.

Beispiele

Verwendung von JSON.isRawJSON()

Das folgende Beispiel zeigt, wie JSON.isRawJSON() verwendet wird, um zu testen, ob ein Objekt von JSON.rawJSON() zurückgegeben wurde. Es implementiert einen benutzerdefinierten Serialisierer, der Daten in ein YAML-ähnliches Format serialisiert.

js
function mySerializer(value, indent = "") {
  if (typeof value !== "object" || value === null) {
    return JSON.stringify(value);
  }
  if (JSON.isRawJSON(value)) {
    return value.rawJSON;
  }
  const subIndent = `${indent}  `;
  if (Array.isArray(value)) {
    return `- ${value.map((v) => mySerializer(v, subIndent)).join(`\n${indent}- `)}`;
  }
  return Object.entries(value)
    .map(([key, value]) => {
      const subValue = mySerializer(value, subIndent);
      if (subValue.includes("\n")) {
        return `${key}:\n${subIndent}${subValue}`;
      }
      return `${key}: ${subValue}`;
    })
    .join(`\n${indent}`);
}

console.log(
  mySerializer({
    name: "Josh",
    userId: JSON.rawJSON("12345678901234567890"),
    friends: [
      { name: "Alice", userId: JSON.rawJSON("9876543210987654321") },
      { name: "Bob", userId: JSON.rawJSON("56789012345678901234") },
    ],
  }),
);

// name: "Josh"
// userId: 12345678901234567890
// friends:
//   - name: "Alice"
//     userId: 9876543210987654321
//   - name: "Bob"
//     userId: 56789012345678901234

Wenn in dem obigen Beispiel die userId-Werte nicht durch JSON.rawJSON() erstellt, sondern direkt als Zahlen übergeben wurden, dann kommt es aufgrund von JS-Gleitkomma-Präzisionsbeschränkungen zu einem Präzisionsverlust.

js
console.log(
  mySerializer({
    name: "Josh",
    userId: 12345678901234567890,
    friends: [
      { name: "Alice", userId: 9876543210987654321 },
      { name: "Bob", userId: 56789012345678901234 },
    ],
  }),
);

// name: "Josh"
// userId: 12345678901234567000
// friends:
//   - name: "Alice"
//     userId: 9876543210987655000
//   - name: "Bob"
//     userId: 56789012345678900000

Spezifikationen

Specification
JSON.parse source text access
# sec-json.israwjson

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch