~/tools / LLM JSON Repair
LLM JSON Repair — Corrija o JSON quebrado devolvido por um modelo de IA
Corrija o quase-JSON que os modelos de IA devolvem: remove blocos de código e texto solto, tira vírgulas finais e comentários, corrige aspas, chaves e valores do Python, e lista exatamente o que mudou. Nada sai do seu navegador.
Só são aplicadas correções com uma única resposta clara. Todo o resto é apontado com a posição, em vez de ser adivinhado.
Tudo roda no seu navegador. O texto que você cola não é enviado.
Os modelos de linguagem costumam envolver o JSON em um bloco de código e uma frase, e depois quebram a sintaxe: uma vírgula final, aspas simples, um comentário, True no lugar de true. O JSON.parse rejeita tudo isso. Esta ferramenta localiza o JSON no texto e repara apenas os problemas que têm uma única correção clara, e depois lista cada mudança para que você possa avaliá-la. Se a saída foi cortada, ela fecha o que está aberto e avisa que podem faltar dados. Ela não adivinha: o que não consegue reparar é apontado com uma posição, em vez de ser alterado em silêncio.
Casos de uso
- Corrigir a resposta de um modelo antes de ela ir para o JSON.parse ou para um arquivo de configuração
- Limpar uma resposta que traz um bloco de código e uma explicação em volta do JSON
- Conferir o que mudou, para que um valor reparado não chegue à produção sem ser notado
Como usar
- Cole a resposta do modelo ou carregue o exemplo.
- Leia o JSON reparado e a lista de mudanças abaixo dele.
- Copie o resultado. As mudanças marcadas em âmbar podem perder informação, então confira-as.
O que conta como JSON válido
- Strings e nomes de membros usam somente aspas duplas. Aspas simples não fazem parte da gramática.
- Não existem comentários. O único preenchimento permitido é o espaço em branco.
- A vírgula vai apenas entre membros ou elementos, então uma vírgula final não é permitida.
- Um valor é um objeto, um array, um número ou uma string, ou um entre false, null e true. Infinity, NaN e undefined não são valores JSON.
- Os números não podem ter zero à esquerda nem + à esquerda, e o ponto decimal precisa de dígitos dos dois lados, então 012, +5, .5 e 5. são todos inválidos.
- Os caracteres de controle de U+0000 a U+001F dentro de uma string precisam ser escapados, então uma quebra de linha pura em uma string é inválida.
- O nível mais alto pode ser qualquer valor, não só um objeto ou um array.
Como a saída de um modelo costuma quebrar
| Problema | Exemplo | O que esta ferramenta faz |
|---|---|---|
| Bloco de código e conversa | Sure! ```json { … } ``` Hope this helps | Pega só o JSON |
| Vírgula final | [1, 2,] | Remove a vírgula |
| Comentário | {"a": 1 // note} | Remove o comentário |
| Aspas simples | {'a': 'b'} | Usa aspas duplas |
| Chave sem aspas | {a: 1} | Coloca aspas na chave |
| Valores do Python | {"ok": True, "x": None} | Escreve true e null |
| Quebra de linha pura em uma string | "line one⏎line two" | Escapa como \n |
| NaN ou undefined | {"x": NaN} | Escreve null e avisa que o valor se perdeu |
| Resposta cortada | {"items": [{"id": 1}, {"id": | Fecha o que está aberto e avisa que podem faltar dados |
O que é seguro reparar e o que não é
Um reparo é seguro quando o texto quebrado tem uma só leitura razoável. Uma vírgula final, um comentário ou um bloco de código podem ser removidos sem mudar o que os dados dizem. Outras mudanças alteram o significado, por isso são marcadas e você deve conferi-las: fechar uma resposta que foi cortada gera um JSON válido, mas com dados faltando, e transformar NaN em null descarta o valor original.
Dois limites vêm do próprio JSON. A RFC 8259 diz que os nomes dentro de um objeto devem ser únicos e que o comportamento do software é imprevisível quando não são; esta ferramenta mantém o último, como faz o JSON.parse. A RFC também diz que o software interopera bem quando não espera mais faixa nem precisão do que as de um double IEEE 754. Esta ferramenta mantém os números como você os escreveu, mas um programa que lê um inteiro muito longo como double o arredonda. Os inteiros entre -(2^53)+1 e (2^53)-1 são exatos.
Melhor: peça à API uma saída estruturada
Reparar é um plano B. As APIs dos modelos podem restringir a saída a um schema, e os três fornecedores documentam isso de forma diferente.
- OpenAI: o Structured Outputs faz o modelo gerar respostas que seguem o seu JSON Schema, enquanto o modo JSON só garante um JSON válido. Uma recusa pode não seguir o schema, e uma resposta que atinge o limite máximo de tokens fica incompleta (status incomplete, motivo max_output_tokens).
- Anthropic: as saídas estruturadas usam decodificação restrita para que a resposta siga o seu schema, e a documentação diz que isso vale na maioria dos casos. Uma recusa (stop_reason refusal) ou uma resposta cortada por max_tokens pode não corresponder ao schema, então verifique o stop_reason antes de fazer o parse.
- Google Gemini: o modelo é configurado para produzir um JSON que segue o schema que você fornece. A correção semântica não é garantida, então valide os valores, e algumas restrições, como minLength e maxLength, não são aplicadas.
Nenhum dos três promete, na documentação, um JSON válido quando a saída é cortada. Verifique por que o modelo parou antes de confiar em um resultado já processado.
Fontes (verificadas em 2026-10-23): RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output
FAQ
O que ela corrige?
Remove o bloco de código e o texto em volta do JSON; remove vírgulas finais e comentários // ou /* */; transforma aspas simples e aspas curvas em aspas duplas; coloca aspas em chaves sem aspas; transforma True, False e None em true, false e null; adiciona vírgulas que faltam entre linhas; escapa quebras de linha puras dentro de strings; e reescreve números como +5, .5 e 0x1F em números JSON válidos.
O que ela nunca altera?
Os valores. As strings são mantidas caractere por caractere e os números mantêm seus dígitos, então um ID longo como 12345678901234567890 não é arredondado. As chaves duplicadas seguem o JSON.parse: vale a última.
E se a resposta foi cortada?
Ela fecha as strings, os arrays e os objetos abertos e descarta uma chave que ainda não tem valor. Isso deixa o texto válido, mas não completo, então o resultado é marcado como possivelmente com dados faltando. Peça ao modelo que continue, ou aumente o limite de saída dele, em vez de confiar em um resultado truncado.
Por que NaN ou undefined viraram null?
O JSON não tem NaN, Infinity nem undefined. A ferramenta escreve null no lugar deles e marca a troca, porque o valor original se perde.
Por que ela se recusa a processar algumas entradas?
Quando não há uma única correção óbvia, como reticências (...) no lugar de itens omitidos, ou uma palavra solta onde deveria haver um valor, ela para e mostra onde, em vez de adivinhar.
O texto é enviado a um servidor?
Não. O reparo acontece no seu navegador.