Corrigir chaves sem aspas em JSON

Chaves como name, active e profile precisam de aspas em JSON válido, mesmo quando parecem identificadores normais.

Por que chaves sem aspas falham

O JavaScript permite nomes de propriedade «pelados» em literais de objeto. O JSON não; toda chave de objeto precisa ser uma string entre aspas duplas.

Exemplo errado

{ name: "Ada", active: true }

JSON corrigido

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

Por que identificadores JavaScript parecem chaves JSON

Em um literal de objeto JavaScript, { name: "Ada" } é legal porque name é um identificador válido. O JSON eliminou esse atalho para que um parser só precise reconhecer uma forma — uma string entre aspas — para qualquer chave, mantendo a gramática pequena o bastante para ser implementada em qualquer linguagem.

Chaves que sempre precisam de aspas

Mesmo se um parser aceitasse identificadores pelados, várias formas de chave ainda exigiriam aspas: palavras reservadas como return ou class, nomes com hifens ou pontos, nomes começando com dígito e nomes Unicode com caracteres combinantes ou emoji. Colocar aspas em todas as chaves contorna todos esses casos especiais.

Quando o auto-reparo pode colocar aspas com segurança

A ferramenta de reparo coloca aspas em identificadores pelados que aparecem em posição de chave — logo após { ou , e seguidos por :. Ela não mexe em chaves já com aspas, valores ou texto dentro de strings, então adicionar aspas é seguro mesmo quando o documento mistura chaves válidas e inválidas.

JSON5 e JSONC

JSON5 e JSONC (o formato que o VS Code usa para configurações) permitem chaves sem aspas e comentários. São bons para configuração editada por humanos, mas não para intercâmbio — nunca exponha JSON5 via API, clientes padrão vão rejeitar.

FAQ

P: Por que meu JSON tem chaves sem aspas? R: Geralmente porque foi copiado de um literal de objeto JavaScript ou gerado por uma template que esqueceu as aspas. P: Posso deixar chaves sem aspas no package.json? R: Não — package.json é JSON estrito; só tsconfig.json (JSONC) tolera.