JSON "quebrado" é um problema comum: o arquivo parece quase correto, mas um parser se recusa a lê-lo. Muitas vezes a causa é um preço colado direto de uma planilha, sem pensar no formato numérico que o JSON exige.
Causas comuns de JSON inválido
- Vírgula sobrando antes de um colchete de fechamento —
{"a": 1,}—, que o JavaScript tolera mas um parser JSON rigoroso não. - Aspas simples em vez de duplas — comum ao copiar de um objeto literal JavaScript.
- Chaves sem aspas —
{name: "Ana"}em vez de{"name": "Ana"}. - Comentários — a especificação JSON não prevê comentários de forma alguma, diferente de JSON5 ou JSONC.
- Saída truncada — se uma resposta de API ou arquivo de log é cortado no meio, o documento fica sem fechamento.
A vírgula decimal: uma armadilha que vem do Excel
No Brasil e em Portugal, a vírgula separa a casa decimal e o ponto agrupa milhares: "R$ 1.234,50" é um preço perfeitamente normal numa planilha. Colado sem conversão num campo JSON, {"preco": 1.234,50} não é um número decimal válido para o parser — ele lê 1.234, encontra uma vírgula fora de lugar e sobra um token solto 50. Uma ferramenta de reparo pode até tentar adivinhar qual era o valor pretendido, mas não tem garantia nenhuma de acertar se era 1234,50 ou apenas 1.234 truncado.
Como funciona o reparo automático
Uma ferramenta de reparo de JSON aplica heurísticas: adiciona aspas ausentes, remove vírgulas sobrando, fecha colchetes não fechados com base no contexto. Isso funciona bem para erros típicos e comuns, mas não é mágica — a ferramenta não consegue adivinhar qual valor era pretendido se os dados estiverem mais seriamente corrompidos.
Os limites do possível
O reparo automático corrige sintaxe, não semântica. Se um campo inteiro estiver faltando, ou um valor estiver errado logicamente, a ferramenta não vai detectar isso — o resultado ainda precisa de verificação manual, especialmente quando os números vieram de uma planilha em formato brasileiro ou português.
Quando o reparo é ambíguo
Alguns danos têm várias correções igualmente plausíveis. Uma string cortada como {"a": 1, "b": 2 pode simplesmente ser fechada com um colchete — perdendo dados, se na verdade havia mais um campo pretendido. Nesses casos, a heurística de reparo faz a suposição "menos destrutiva", mas isso é um palpite, não uma garantia de restaurar a intenção original.