Cole dois JSON, por exemplo a resposta esperada e a resposta obtida de uma API, e veja exatamente o que mudou: campos adicionados, removidos, valores alterados e mudanças de tipo, cada um com o caminho até o campo. A comparação é feita no seu navegador.
Como usar
- Cole o JSON original (ou esperado) no campo A e o novo (ou obtido) no campo B.
- Clique em Comparar.
- Leia a lista de diferenças: cada linha mostra o tipo da mudança, o caminho do campo e os valores antes e depois.
- Use Inverter A e B para ver a comparação no sentido contrário e Copiar relatório para colar o resultado em um bug ou pull request.
Exemplo
JSON A:
{"id": 7, "status": "ativo", "cliente": {"nome": "Ana", "email": null},
"itens": [{"sku": "A1", "qtd": 1}, {"sku": "B2", "qtd": 2}], "cupom": "QA10"}
JSON B:
{"id": 7, "status": "inativo", "cliente": {"nome": "Ana"},
"itens": [{"sku": "A1", "qtd": "1"}], "frete": 0}
Relatório:
~ $.status: "ativo" → "inativo"
- $.cliente.email: null
~ $.itens[0].qtd: tipo número → texto (1 → "1")
- $.itens[1]: {"sku":"B2","qtd":2}
- $.cupom: "QA10"
+ $.frete: 0
Repare em duas diferenças que passam despercebidas numa leitura rápida: o campo email deixou de existir (não virou null, sumiu) e a quantidade passou de número para texto.
Como funciona
Os dois textos são validados com JSON.parse. Depois a ferramenta percorre as duas estruturas em paralelo, recursivamente:
- Objetos: compara chave a chave, sem considerar a ordem. Uma chave que só existe em A é removida; uma que só existe em B é adicionada.
- Arrays: compara posição a posição, porque em JSON a ordem dos itens faz parte do dado. Itens a mais em B são adicionados; itens a menos são removidos.
- Tipos diferentes no mesmo caminho (número e texto, objeto e array,
nulle0) são reportados como tipo alterado. - Valores simples (texto, número, booleano,
null) são comparados por igualdade estrita.
O caminho segue a notação usada em JSONPath: $ é a raiz, .campo acessa uma chave e [0] um item de array. Chaves com espaço ou caracteres especiais aparecem entre colchetes, como $["nome completo"].
Uso em QA e desenvolvimento
- Testes de regressão de API: comparar a resposta atual com a de uma versão anterior.
- Investigar falhas de asserção em testes de contrato, quando a mensagem do framework mostra os dois objetos inteiros.
- Comparar respostas de ambientes diferentes (homologação e produção) para o mesmo pedido.
- Revisar mudanças em arquivos de configuração, fixtures e massa de dados.
- Documentar no bug exatamente quais campos divergem, em vez de anexar dois JSON longos.
Formatação e ordem
Com a opção Ignorar diferenças de formatação marcada (padrão), espaços, quebras de linha e ordem das chaves não contam: só o conteúdo. Desmarcando, quando o conteúdo é igual mas o texto não, a ferramenta avisa que a diferença é apenas de formatação.
Limitações
- Arrays são comparados por posição. Se um item for inserido no início, todos os seguintes aparecem como alterados. Ordenar os dois arrays antes ajuda quando a ordem não importa para o seu caso.
- A lista mostra até 5.000 diferenças, para manter o navegador responsivo.
- Números acima de 9.007.199.254.740.991 perdem precisão no JavaScript; dois IDs longos muito parecidos podem ser vistos como iguais. Compare-os como texto.
1e1.0são o mesmo número em JSON e não geram diferença.
Perguntas frequentes
Campo ausente e campo com null são a mesma coisa?
Não, e a ferramenta separa os dois. Muitas APIs tratam “não informado” e “informado como vazio” de formas diferentes, então essa distinção costuma revelar bugs de serialização.
Por que “1” e 1 aparecem como diferença?
Porque são tipos diferentes em JSON: um é texto e o outro é número. Para um cliente tipado, essa mudança pode quebrar a desserialização mesmo com o valor “igual”.
Posso comparar respostas muito grandes?
Sim, até cerca de 2 milhões de caracteres somando as duas entradas. Acima disso, a ferramenta recusa para não travar a aba.
Os JSON são enviados para algum servidor?
Não. A comparação roda no JavaScript da página e nada é registrado. Prefira dados fictícios mesmo assim.
Ferramentas relacionadas
- Formatador e validador de JSON: encontre a linha de um erro de sintaxe antes de comparar.
- Conversor de timestamp Unix: entenda campos de data numéricos que mudaram.
