Diferenciar JSON

Compare dois JSON e receba um veredito por caminho — igual, alterado, adicionado ou removido — com contagem, relatório copiável e download.

A comparação acontece localmente no seu navegador. Nada sai do seu dispositivo.

Resultado da diferença
—

Cole ou carregue dois documentos JSON e clique Comparar (digitar também atualiza após uma breve pausa).

Como funciona

Os dois painéis são analisados com JSON.parse — uma falha em qualquer lado é reportada no próprio painel e interrompe a comparação. O percorredador então desce pelas duas árvores em paralelo: objetos são casados chave por chave, então a ordem literal das chaves no arquivo nunca produz um diff falso; dois escalares (ou tipos divergentes) na mesma posição produzem um veredicto, e cada caminho aparece em notação de pontos e colchetes como users[2].role.

Veredictos por caminho
Cada folha recebe um de quatro status. igual — os dois lados têm o mesmo valor. alterado — há um valor no mesmo caminho dos dois lados mas diferente, mostrado como antigo → novo. adicionado — a chave ou índice existe só à direita. removido — só à esquerda. Subárvores adicionadas ou removidas são impressas como JSON serializado, truncadas a 80 caracteres.
Arrays são alinhados por índice
Arrays são comparados posicionalmente: elemento 0 contra elemento 0, e assim por diante. Esse é o padrão honesto para dados ordenados, mas é um modelo diferente de um diff do tipo conjunto, que casaria elementos por conteúdo e reportaria uma única inserção onde o alinhamento por índice reporta uma cascata de mudanças. Se seus arrays são coleções sem ordem, ordene-os primeiro no seu arquivo para um resultado mais limpo.
Porcentagem de igualdade
O resumo conta cada veredicto e informa a proporção de iguais: caminhos iguais divididos por todos os caminhos, arredondado. Dois documentos idênticos leem portanto 100% de igualdade, e a estatística é calculada sobre os veredictos de folha, então um contêiner que apenas sobrevive à edição de um filho não adiciona peso próprio.

Perguntas frequentes

Qual o tamanho máximo dos arquivos JSON?

Tudo roda na memória da sua aba, então o limite prático é o seu dispositivo, não a ferramenta. Documentos de até uns 5 MB são comparados sem problemas na maioria das máquinas; arquivos muito maiores deixam a caminhada recursiva e a árvore exibida lentas. Se uma comparação enorme travar, recorte os dois lados para as seções que você realmente precisa antes de colar.

Dá para ver a diferença ordenada por caminho?

Os caminhos aparecem na ordem do documento: primeiro as chaves de objeto na ordem em que ocorrem no lado esquerdo (só as da direita depois), depois os índices de array em ordem crescente. Não há alternador de ordem alfabética, porque manter a ordem natural de leitura facilita confrontar o resultado com o seu próprio arquivo. Você pode copiar o relatório de texto e ordená-lo externamente se preferir.

Posso comparar dois arrays diretamente?

Sim — o valor de nível superior pode ser um array nos dois lados, e ele é diferenciado índice a índice como qualquer outro. Só lembre que índice a índice é posicional: se você inserir um elemento no início de um array de 100 itens, todos os índices seguintes se deslocam, e a ferramenta reporta honestamente uma longa cadeia de alterações em vez de uma única inserção.

Por que reordenar chaves aparece como igual?

Porque objetos JSON são mapas chave/valor, não registros ordenados, e um diff semântico não deve ligar para a ordem de serialização. A caminhada casa chaves por nome, então mover um campo de linha no arquivo não gera nenhuma linha de diff. Arrays, por outro lado, são ordenados, então a ordem dos elementos importa.

Algo é enviado para um servidor?

Não. Os dois documentos são analisados e percorridos localmente com JavaScript puro no seu navegador — mesmo quando carregados do disco, são lidos com FileReader e nunca saem do dispositivo. Nenhuma requisição de rede acompanha a comparação.