JSON vs littéral d’objet JavaScript

Le JSON ressemble à un littéral d’objet JavaScript, mais c’est un format de données plus petit, à la syntaxe plus stricte et sans valeurs exécutables.

Version courte

Un littéral d’objet JavaScript est du code source. JSON est un format d’échange de données. Le recouvrement est suffisamment large pour induire en erreur, mais les règles diffèrent : les clés et chaînes JSON exigent des guillemets doubles, JSON n’a pas de commentaires, et JSON ne peut représenter ni fonctions, ni undefined, ni NaN, ni Infinity, ni objets Date, ni expressions régulières.

Valeurs JSON valides

Un document JSON peut contenir un objet, un tableau, une chaîne, un nombre, un booléen ou null. Les chaînes doivent utiliser des guillemets doubles. Les clés d’objet doivent aussi être des chaînes entre guillemets doubles. Les nombres ne peuvent pas utiliser de formes spécifiques à JavaScript comme la notation hexadécimale, NaN, Infinity ou les séparateurs numériques.

  • Chaîne JSON valide : "hello"
  • Booléen JSON valide : true
  • Null JSON valide : null
  • Clé d’objet JSON valide : "name"

JavaScript valide mais JSON invalide

{ name: 'Ada', active: true, createdAt: new Date(), onSave() { return true }, tags: ['dev',], }

Version JSON valide

{ "name": "Ada", "active": true, "createdAt": "2026-05-13T00:00:00.000Z", "tags": ["dev"] }

Pourquoi les APIs rejettent les données qui ressemblent à du JavaScript

Les serveurs d’API parsent généralement les corps de requête avec un parser JSON, pas avec un moteur JavaScript. C’est une garantie de sécurité et d’interopérabilité : tout langage peut parser les mêmes données sans exécuter de code. Si un corps inclut des commentaires, des méthodes, undefined ou new Date(), le serveur ne peut pas le traiter comme de la donnée pure en toute sécurité.

Comment convertir en sécurité

Remplacez les valeurs exécutables ou spécifiques à un langage par des données simples. Les dates deviennent des chaînes, les valeurs manquantes deviennent null ou des clés omises, les commentaires partent dans la documentation, et les fonctions sont représentées par des champs de données explicites comme un nom de stratégie ou un type.