Pular para o conteudo principal
CuteJSON
↑↓ Navegar Enter Selecionar Esc Fechar

Como o CuteJSON funciona, e por que nada que voce cola sai do seu navegador

Publicado 5 min de leitura Por Akash Kinkar Pandey

Toda ferramenta neste site roda no seu navegador. Nao ha upload, nao ha conta e nao ha servidor que veja seu JSON, e este post explica como isso funciona, como verificar vo mesmo em vez de confiar, e o que as ferramentas deliberadamente nao fazem.

O que acontece quando voce cola

Quando voce abre uma pagina de ferramenta, seu navegador baixa uma pagina HTML e um pequeno arquivo JavaScript. Essa e toda a ferramenta. Quando voce cola um documento e clica em um botao, a analise e a impressao acontecem dentro da aba, e o resultado e escrito de volta na pagina. Nada e enviado a lugar nenhum, porque nao ha para onde enviar: o site nao tem backend para dados de ferramentas.

Isso tambem significa que nada e armazenado. Feche a aba e o documento desaparece. Nao ha historico para limpar, nao ha conta para deletar e nao ha cache guardando seus dados. O site mantem dois pequenos valores no seu navegador, sua escolha de tema e sua resposta ao aviso de cookies, e ambos ficam no seu dispositivo.

Verifique vo mesmo em trinta segundos

Qualquer afirmacao de privacidade que voce nao pode verificar e apenas uma frase em uma pagina. Esta leva meio minuto para testar:

  1. Abra qualquer ferramenta, por exemplo o formatador.
  2. Abra as ferramentas de desenvolvedor do seu navegador e mude para a aba Rede.
  3. Limpe a lista, cole um pouco de JSON e clique em Formatar.

Nada novo aparece na lista, porque nenhuma requisicao e feita. Compare isso com uma ferramenta que envia para um endpoint quando voce clica no botao, voce vera imediatamente no mesmo painel.

Ha uma excecao deliberada, e esta em uma pagina diferente: o formulario de contato realmente envia o que voce digita, ja que uma mensagem que fica no seu navegador nao e uma mensagem. Todo o resto fica local.

O projeto tambem afirma isso automaticamente. O suite de testes end-to-end cola um marcador unico em cada ferramenta, executa, e falha na build se esse marcador aparecer em qualquer requisicao que a pagina faça. Esse teste roda em toda build, entao a afirmacao nao pode deteriorar silenciosamente da proxima vez que alguem adicionar uma funcionalidade.

Por que as ferramentas leem tokens em vez de analisar

A maioria dos formatadores online faz algo assim internamente:

JSON.stringify(JSON.parse(input), null, 2)

Parece inofensivo e corrompe dados de duas maneiras especificas.

Inteiros longos perdem precisao. Numeros JavaScript sao doubles, entao um inteiro maior que aproximadamente dezesseis digitos nao pode ser mantido exatamente. Cole {"id": 12345678901234567890} em um formatador feito assim e voce recebe 12345678901234567000 de volta. Nada avisa voce.

Chaves que parecem inteiros sao reordenadas. Objetos JavaScript ordenam chaves semelhantes a inteiros numericamente, antes de tudo mais. Entao {"2": "prata", "1": "ouro"} volta como {"1": "ouro", "2": "prata"}, isso importa sempre que a ordem era significativa, e frequentemente e em um arquivo de configuracao.

As ferramentas aqui nunca constroem um valor JavaScript a partir do seu documento. Elas tokenizam, mantendo o texto fonte exato de cada token, e reimprimem o fluxo de tokens com espacamento diferente. Seu documento volta byte a byte como voce escreveu, com apenas a mudanca de espacamento. Testes unitarios bloqueiam ambos os casos, para que um refactor futuro nao possa reintroduzir nenhum dos dois.

A mesma decisao percorre o resto do site. O visualizador mostra o texto que voce realmente escreveu ao lado de cada chave. O diff nao chamar dois inteiros de vinte digitos iguais apenas porque colapsam no mesmo double. O avaliador de ponteiro devolve a fonte exata do valor que ele resolveu.

Por que as mensagens de erro sao como sao

Um validador que diz “token inesperado” nao te disse nada que voce ja nao soubesse. A maior parte do trabalho no analisador aqui foi para as mensagens. Uma virgula final e reportada como uma virgola final. Um colchete nao fechado e reportado na linha onde o colchete foi aberto, nao no final do arquivo. Uma palavra-chave com caso errado sugere a grafia em minuscula. Uma chave duplicada produz um aviso com ambos os numeros de linha em vez de silencio.

Se voce quer o catalogo, o post sobre erros comuns de sintaxe JSON percorre os nove que aparecem mais, com a edicao que corrige cada um.

O que o site nao faz

Alguns padroes aqui sao implementados parcialmente. O testador JSONPath suporta os seletores que consultas reais usam e os lista na pagina. Extensoes de funcao e alguns outros cantos da RFC 9535 estao faltando, e usar uma produz uma mensagem nomeando a funcionalidade em vez de uma falha vaga. JSON Pointer e o caso oposto: a RFC 6901 tem quatro paginas, entao tudo e implementado.

Reparo pode mudar seus dados. NaN, Infinity e undefined nao tem equivalente JSON, entao a ferramenta de reparo os transforma em null e lista essas mudancas separadamente das correcoes de pontuacao. Leia essa lista em vez de confiar na saida.

Documentos muito grandes degradam de proposito. Acima de aproximadamente duzentos mil caracteres, a coloracao de sintaxe desliga para que a digitacao continue suave, e a pagina diz quando isso acontece. O visualizador desenha uma ramo apenas quando voce abre, e alem de alguns mil valores ele se recusa a expandir todos de uma vez em vez de congelar a aba por um minuto.

Onde comecar

Se voce chegou com um documento quebrado, o validador dira o que esta errado e a ferramenta de reparo corrige as partes mecanicas. Se voce chegou com um documento funcional que nao entende, o visualizador e a maneira mais rapida de entrar. Todo o resto esta na pagina de ferramentas.

Voltar a todos os posts