Corriger les clés sans guillemets en JSON

Des clés comme name, active ou profile doivent être entre guillemets en JSON valide, même quand elles ressemblent à un identifiant ordinaire.

Pourquoi les clés sans guillemets échouent

JavaScript autorise les noms de propriété nus dans les littéraux d’objet. Pas JSON ; chaque clé d’objet doit être une chaîne entre guillemets doubles.

Exemple cassé

{ name: "Ada", active: true }

JSON corrigé

{ "name": "Ada", "active": true }

Pourquoi les identifiants JavaScript ressemblent à des clés JSON

Dans un littéral d’objet JavaScript, { name: "Ada" } est légal parce que name est un identifiant valide. JSON a supprimé ce raccourci pour qu’un parser n’ait qu’une seule forme à reconnaître pour chaque clé — une chaîne entre guillemets —, ce qui garde la grammaire suffisamment petite pour être implémentée dans n’importe quel langage.

Clés qui ont toujours besoin de guillemets

Même si un parser acceptait des identifiants nus, plusieurs formes de clés nécessiteraient encore des guillemets : mots réservés comme return ou class, noms contenant des tirets ou des points, noms commençant par un chiffre, noms Unicode avec des caractères combinatoires ou des emojis. Mettre des guillemets à toutes les clés évite tous ces cas limites.

Quand l’auto-réparation peut mettre des guillemets sans risque

L’outil de réparation met des guillemets sur les identifiants nus en position de clé — c’est-à-dire juste après { ou , et suivis de :. Il ne touche ni aux clés déjà entre guillemets, ni aux valeurs, ni au texte à l’intérieur des chaînes, donc l’ajout de guillemets est sûr même quand le document mélange clés valides et invalides.

JSON5 et JSONC

JSON5 et JSONC (le format que VS Code utilise pour ses settings) autorisent tous deux les clés sans guillemets et les commentaires. Bien pour de la configuration éditée à la main, mauvais pour de l’échange — ne diffusez jamais du JSON5 via une API, les clients standards le rejetteront.

FAQ

Q : Pourquoi mon JSON a-t-il des clés sans guillemets ? R : Le plus souvent parce qu’il a été copié depuis un littéral d’objet JavaScript ou généré par un moteur de templates qui les a oubliés. Q : Puis-je laisser des clés sans guillemets dans package.json ? R : Non — package.json est du JSON strict ; seul tsconfig.json (JSONC) le tolère.