Correggere chiavi senza virgolette nel JSON

Chiavi come name, active e profile devono essere tra virgolette in JSON valido, anche quando sembrano identificatori normali.

Perché le chiavi senza virgolette falliscono

JavaScript ammette nomi di proprietà nudi nei letterali di oggetto. JSON no; ogni chiave di oggetto deve essere una stringa tra virgolette doppie.

Esempio errato

{ name: "Ada", active: true }

JSON corretto

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

Perché gli identificatori JavaScript somigliano alle chiavi JSON

In un letterale di oggetto JavaScript, { name: "Ada" } è legale perché name è un identificatore valido. JSON ha tolto quella scorciatoia in modo che il parser debba riconoscere una sola forma — una stringa tra virgolette — per ogni chiave, mantenendo la grammatica abbastanza piccola da essere implementabile in qualunque linguaggio.

Chiavi che richiedono sempre le virgolette

Anche se un parser accettasse identificatori nudi, diverse forme di chiave avrebbero comunque bisogno di virgolette: parole riservate come return o class, nomi con trattini o punti, nomi che iniziano con una cifra e nomi Unicode con caratteri combinanti o emoji. Mettere le virgolette a tutte le chiavi elimina tutti questi casi limite.

Quando l’auto-repair può aggiungere virgolette in sicurezza

Lo strumento di repair aggiunge le virgolette agli identificatori nudi in posizione di chiave — cioè subito dopo { o , e seguiti da :. Non tocca chiavi già tra virgolette, valori o testo dentro alle stringhe, quindi aggiungere virgolette è sicuro anche se il documento mescola chiavi valide e non valide.

JSON5 e JSONC

JSON5 e JSONC (il formato che VS Code usa per le impostazioni) ammettono entrambi chiavi senza virgolette e commenti. Vanno bene per configurazione editata a mano, ma non per interscambio — non esporre mai JSON5 da una API, i client standard lo rifiutano.

FAQ

D: Perché il mio JSON ha chiavi senza virgolette? R: Di solito perché è stato copiato da un letterale di oggetto JavaScript o generato da un motore di template che le ha dimenticate. D: Posso lasciare chiavi senza virgolette in package.json? R: No — package.json è JSON strict; solo tsconfig.json (JSONC) lo tollera.