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.

O que é um comparador de diferenças JSON

Um comparador de diferenças JSON confronta dois documentos JSON estrutura por estrutura e mostra instantaneamente quais chaves foram adicionadas, quais foram removidas e quais valores mudaram. Ele se destaca em situações em que ler o texto completo lado a lado já não é viável pela quantidade de informação: uma resposta de API cujo formato mudou entre versões, ou um arquivo de configuração que difere de um ambiente para outro. Esta ferramenta percorre objetos e arrays recursivamente e reporta as diferenças no nível do caminho de chave, permitindo localizar com precisão onde um valor mudou mesmo dentro de um JSON profundamente aninhado.

Para que a comparação funcione, os dois documentos precisam ser JSON estruturalmente válido. Se alguma das entradas tiver um erro de sintaxe — uma vírgula faltando, uma aspa não fechada, e assim por diante — a ferramenta indica qual delas, A ou B, é inválida, em vez de tentar calcular uma diferença. Também vale entender as duas regras de pareamento distintas aplicadas por esta ferramenta: as chaves de objetos são pareadas pelo nome, enquanto os elementos de arrays são pareados por índice (sua ordem de aparição). Ter isso em mente ajuda a interpretar por que uma determinada chave é sinalizada como "alterada" em vez de "adicionada" ou "removida".

Como comparar JSON com o comparador de diferenças JSON

  1. Cole o JSON de origem (A) Cole ou digite o texto JSON na primeira caixa. Você pode copiar um arquivo de configuração ou resposta de API existente sem reformatação alguma.
  2. Cole o JSON de destino (B) Cole a versão "depois", ou o JSON de um ambiente diferente, na segunda caixa. Qual documento você coloca em A e qual em B determina a direção reportada para as chaves "adicionadas" e "removidas".
  3. Experimente os dados de exemplo (opcional) Clique em "Carregar exemplo" para preencher ambas as caixas com um exemplo que inclui adições, remoções e alterações, permitindo ver imediatamente o formato do resultado.
  4. Leia os resultados da diferença As chaves removidas, adicionadas e alteradas são listadas junto com seus caminhos de chave. Para chaves alteradas, os valores antes e depois são exibidos lado a lado para que você leia a diferença rapidamente.
  5. Limpe as entradas quando necessário Use o botão "Limpar" para esvaziar ambas as caixas e começar a comparar um novo par de documentos JSON.

Dicas para aproveitar melhor

  • 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.

Casos de uso

Detectar alterações indesejadas em respostas de API

Salve uma resposta de API antes e depois de um deploy do backend e compare-as aqui para detectar precocemente adições, remoções ou mudanças de tipo não intencionais, antes que cheguem aos usuários em produção.

Comparar arquivos de configuração entre ambientes

Compare o config.json ou package.json de staging e produção para identificar variáveis de ambiente ausentes ou divergências de versão que passariam despercebidas.

Explicar uma diferença durante a revisão de código

Ao revisar um payload de migração ou uma definição de esquema em formato JSON, compartilhe diretamente a lista de diferenças gerada em vez de descrever as mudanças verbalmente ou em um longo tópico de comentários.

Depurar testes de instantâneo com falha

Compare um instantâneo (snapshot) JSON gerado por um teste automatizado com o valor esperado para identificar rapidamente qual campo exato causou a falha do teste.

Validar payloads de webhooks de terceiros

Compare um payload real recebido de um webhook com um exemplo documentado para confirmar que ele realmente corresponde à estrutura descrita na especificação da API.

Glossário

Caminho de chave
Uma string que representa o percurso da raiz de um documento JSON até um valor específico, escrita em notação de ponto e colchete, como `user.address[0].city`. Os resultados da diferença são agrupados e exibidos neste nível.
Aninhamento
Uma estrutura em que um objeto ou array contém outros objetos ou arrays em seu interior. Quanto mais profundo o aninhamento, mais difícil é detectar alterações apenas visualmente.
Valor folha
Um valor terminal em uma árvore JSON que não se ramifica mais — uma string, número, booleano ou null. No fim das contas, uma comparação de diferenças se resume a parear valores folha entre si.
Divergência de tipo
Uma situação em que o valor no mesmo caminho de chave é de um tipo de dado (por exemplo, uma string) em um documento e de um tipo diferente (por exemplo, um objeto) no outro. Esta ferramenta também reporta divergências de tipo como alterações.
Erro de sintaxe
Um texto malformado que faz o JSON.parse falhar. Uma vírgula faltando ou uma aspa não fechada são exemplos típicos.
JSONPath
Uma especificação de linguagem de consulta para endereçar valores dentro de um documento JSON. A notação de caminho de chave usada nesta ferramenta é, conceitualmente, uma versão simplificada aparentada à sintaxe do JSONPath.

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.
Tool-kun

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

Nosso comparador de diferenças CSV 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.