Corrigir aspas simples em JSON

Strings e chaves de objeto em JSON precisam de aspas duplas. Valores entre aspas simples são comuns em trechos de JavaScript, saídas tipo Python e respostas de LLM.

Por que as aspas simples falham

JSON estrito só aceita strings com aspas duplas. Um parser vai rejeitar {'name':'Ada'} mesmo que a forma soe familiar para quem desenvolve em JavaScript.

Exemplo errado

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

JSON corrigido

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

De onde vem o texto com aspas simples

O repr() do Python e a impressão de dicts, literais de objeto JavaScript copiados do console, inspeção de hashes em Ruby e muitas respostas de LLM usam aspas simples. Nada disso é JSON — são literais nativos da linguagem que apenas se parecem.

Por que um find-and-replace cego é arriscado

Trocar ' por " sem critério quebra valores com apóstrofo, tipo { 'note': 'it\'s fine' }. Depois da troca, o apóstrofo interno colide com o novo delimitador de string. Um conversor seguro precisa rastrear o contexto das aspas e trocar só os delimitadores, sem mexer nos caracteres internos.

Estratégia segura de conversão

Tokenize a entrada primeiro: percorra o texto, identifique limites de string pela aspa de abertura e reconstrua cada token com aspas duplas — escapando aspas duplas internas e desfazendo escapes redundantes de aspas simples. A ferramenta de reparo deste site faz isso em uma passada.

Erros de sintaxe JSON relacionados

JSON com aspas simples costuma vir acompanhado de outros pecados ao estilo JavaScript: chaves sem aspas, vírgulas finais, comentários de linha ou valores undefined. Depois de corrigir as aspas, valide o resultado para expor o que sobrar.

FAQ

P: Strings com aspas simples são válidas em JSON5? R: Sim, o JSON5 permite. P: O json.loads do Python aceita aspas simples? R: Não — use ast.literal_eval se a fonte realmente for um literal Python, ou converta as aspas antes. P: As chaves JSON também precisam de aspas duplas? R: Sim — chaves são strings, mesma regra.