Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

JSON : méthode statique isRawJSON()

Limited availability

Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.

La méthode statique JSON.isRawJSON() vérifie si une valeur est un objet retourné par JSON.rawJSON().

Syntaxe

js
JSON.isRawJSON(value)

Paramètres

value

La valeur à tester.

Valeur de retour

true si value a été créé par la méthode JSON.rawJSON() ; sinon false.

Description

Les objets « raw JSON », lorsqu'ils sont sérialisés en JSON, sont traités comme s'ils étaient déjà une portion de JSON. De plus, du fait du fonctionnement de JSON.rawJSON(), le JSON brut est garanti être un JSON syntaxiquement valide. Pour plus d'informations sur la forme et le comportement des objets JSON brut, voir JSON.rawJSON(). Cette méthode existe pour permettre à d'autres bibliothèques de sérialisation d'implémenter un comportement similaire à JSON.stringify() pour les objets JSON brut.

Exemples

Utiliser la méthode isRawJSON()

L'exemple suivant montre comment utiliser JSON.isRawJSON() pour tester si un objet a été retourné par JSON.rawJSON(). Il implémente un sérialiseur personnalisé qui produit un format semblable à YAML.

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

Si, dans l'exemple ci‑dessus, les valeurs userId n'avaient pas été créées par JSON.rawJSON() mais passées directement comme nombres, alors nous subirions une perte de précision en raison des limites de précision des nombres à virgule flottante en JS.

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

Spécifications

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

Compatibilité des navigateurs

Voir aussi