UTILS.
100% no navegador
{ }

Objeto JS para JSON Estrito

Repare um literal de objeto JavaScript solto — chaves sem aspas, aspas simples, vírgulas finais, comentários — em JSON válido e estrito, sem eval.

— a saída aparece aqui —

Sobre esta ferramenta

A ferramenta Objeto JS para JSON Estrito repara um literal de objeto solto no estilo JavaScript ou JSON5 em JSON estrito e válido. Ela é construída sobre um tokenizer escrito à mão — nunca usa eval ou new Function — então é segura sob uma Content Security Policy estrita e segura para colar texto não confiável. Tudo roda no seu navegador.

Ela aceita as coisas que o JSON real rejeita: chaves identificadoras sem aspas, strings com aspas simples, vírgulas finais antes de ] ou }, comentários // de linha e /* de bloco */, literais hexadecimais (0xFF), octais e binários, números com sinal-mais inicial e ponto inicial (+1, .5), e os valores undefined, NaN e Infinity. Chaves são recitadas com aspas duplas, strings são re-escapadas corretamente, comentários e vírgulas finais são removidos, e números são normalizados para números JSON simples. Você escolhe como tratar undefined (converter para null ou remover a chave) e números não finitos (converter para null ou gerar um erro), então o valor é re-serializado com JSON.stringify na indentação que você escolher — 2 espaços, 4 espaços, tabs ou minificado.

Quando a entrada não pode ser analisada, a ferramenta relata o primeiro erro de sintaxe com sua linha e coluna para que você encontre o problema rapidamente. Isso complementa um formatador de JSON estrito, que simplesmente rejeita entradas soltas — aqui o objetivo é salvar saída de console copiada, trechos de configuração e objetos editados à mão em JSON que qualquer parser aceitará.

Perguntas frequentes

Qual sintaxe solta ela aceita?
Chaves sem aspas, strings com aspas simples, vírgulas finais, comentários // e /* */, números hex/octais/binários, números com sinal-mais inicial e ponto inicial, e os literais undefined, NaN e Infinity — as coisas comuns que tornam objetos JS copiados inválidos como JSON.
Ela usa eval para analisar?
Não. Ela usa um tokenizer escrito à mão e um parser de descida recursiva, nunca eval ou new Function, então funciona sob uma Content Security Policy estrita e é segura para entradas não confiáveis. Ela apenas produz dados, nunca executa código.
Como undefined, NaN e Infinity são tratados?
JSON não tem tais valores. Você escolhe: undefined pode virar null ou ter sua chave removida, e NaN/Infinity podem virar null ou gerar um erro. Isso mantém a saída estritamente válida como JSON de qualquer forma.
O que acontece quando a entrada é inválida?
O parser para no primeiro erro de sintaxe genuíno e o relata com a linha e coluna onde ocorreu, para que você possa localizar e corrigir o caractere ofensivo em vez de adivinhar.

Mais ferramentas