Comparador de diferenças JSON

Compare dois documentos JSON e veja instantaneamente quais chaves foram adicionadas, removidas ou alteradas, listadas por caminho de chave. Objetos e arrays são percorridos recursivamente, e até divergências de tipo são exibidas como alterações. Tudo é processado no seu navegador, sem envio a nenhum servidor.

Dicas

  • Os caminhos de chave são exibidos em notação de ponto e colchete, como `user.address[0].city`, permitindo localizar de imediato qual valor aninhado mudou, não importa o quão profunda seja a estrutura do JSON.
  • Os arrays são comparados pareando elementos pelo mesmo índice. Note que apenas reordenar os elementos de um array fará com que todos eles sejam detectados como alterados.
  • Se a mesma chave contém uma string em um documento e um objeto no outro, essa divergência de tipo também é reportada como alteração, exibindo os dois valores brutos lado a lado.
  • Ao comparar respostas de API antes e depois de um deploy, remova antes campos que sempre mudam, como carimbos de data/hora ou IDs de requisição, para focar apenas nas diferenças que realmente importam.
  • Mesmo em um JSON com uma quantidade enorme de valores inalterados, apenas a contagem de folhas coincidentes é exibida, mantendo o resultado legível em vez de sobrecarregado.

Perguntas frequentes

É comumente usado para comparar a resposta de uma API antes e depois de um deploy e detectar alterações indesejadas, ou para identificar diferenças entre arquivos de configuração (como config.json) em ambientes distintos. Extrair apenas as diferenças é muito mais rápido do que comparar dois JSONs a olho nu.

Não. As chaves de um objeto são pareadas pelo nome, então não importa se A e B listam suas chaves em ordens diferentes. Considera-se apenas se cada chave existe e se seu valor coincide, ignorando a ordem visual no texto de origem.

Os arrays são pareados por índice (elemento 0, elemento 1, etc.), então mesmo que o conteúdo real seja o mesmo, uma mudança de ordem será detectada como uma alteração naquele índice. Esta ferramenta não oferece comparação de arrays que ignore a ordem.

Não. Todo o processamento de comparação ocorre inteiramente no JavaScript do seu navegador, e o conteúdo inserido nunca é transmitido a nenhum servidor, tornando seguro comparar até respostas que incluam chaves de API ou dados pessoais.

Se o JSON.parse falhar, uma mensagem de erro indica claramente se A ou B possui o formato inválido, e nenhuma diferença é calculada. Isso fornece um ponto de partida para localizar erros comuns, como uma vírgula faltando ou uma aspa não fechada.
ツールくん

Curiosidade — Como o pareamento de chaves difere entre o diff de CSV e o de JSON

Nosso comparador de diferenças CSV (dev.csv.csv_diff) compara linhas e células usando uma única coluna-chave designada para identificar cada linha. O JSON não possui uma estrutura plana de linhas e colunas — permite objetos aninhados e arrays —, então, embora ambas as ferramentas sejam chamadas de "comparadores de diferenças", o algoritmo de pareamento subjacente é bastante diferente. Em vez de uma coluna-chave, esta ferramenta usa um "caminho de chave" construído recursivamente da raiz até cada folha como unidade de comparação.

Os arrays são a parte mais delicada ao comparar JSON. Uma linha de CSV pode ser identificada de forma única pelo valor de sua coluna-chave, mas os elementos de um array JSON não possuem nenhum identificador garantido. Esta ferramenta simplesmente pareia elementos por índice (ordem de aparição), um design mais adequado para rastrear mudanças na estrutura de um objeto ou em valores primitivos — como em arquivos de configuração ou respostas de API — do que para rastrear adições e remoções dentro do conteúdo de um array.

Na prática, uma ideia semelhante aparece em pipelines de integração contínua que verificam automaticamente se o contrato de resposta de uma API REST mudou. Esta ferramenta prioriza a conveniência de rodar inteiramente no navegador, mas o conceito subjacente se sobrepõe a testes de instantâneo (snapshot testing) e testes de contrato (contract testing): detectar diferenças na estrutura JSON de forma mecânica é um desafio recorrente em várias etapas do desenvolvimento de software.

→ Ver todas as curiosidades