Nesta página
Para interpretar as diferenças entre dois documentos JSON, aplique três regras: JSON Diff ignora os espaços de formatação e a ordem das propriedades dos objetos, compara arrays por índice e distingue um campo ausente de um campo presente com null. O comparador interpreta valores JSON em vez de comparar linhas. Use essas regras para prever o resumo de cada par antes de testá-lo.
| O que muda entre as entradas | Como o JSON Diff compara | Resultado esperado |
|---|---|---|
| Recuo, quebras de linha ou ordem das chaves de um objeto | Associa propriedades pelo nome e compara seus valores. | Nenhuma diferença se os valores continuarem iguais. |
| Itens de um array | Associa cada índice anterior ao mesmo índice novo. | Uma inserção no início pode gerar várias alterações e uma inclusão. |
Campo ausente versus campo com null |
Verifica a existência da propriedade e seu valor. | Uma inclusão ao adicioná-la; uma remoção ao excluí-la. |
Teste os pares a seguir no JSON Diff, usando a primeira entrada como JSON anterior e a segunda como JSON novo. Espaços dentro de uma string fazem parte do valor: "A B" e "AB" são diferentes.
Mesmo valor, texto diferente: por que não há diferenças?
Antes:
{"a":1,"b":2}
Depois:
{
"b": 2,
"a": 1
}
O resumo esperado é 0 inclusões, 0 remoções e 0 alterações: 0 diferenças no total. As duas entradas têm a com valor 1 e b com valor 2. Mudar a apresentação não muda esses valores.
Um diff textual por linhas poderia marcar a passagem de uma linha para várias, os espaços e a ordem das chaves. A comparação semântica elimina esse ruído quando você quer saber se os dados mudaram. JSON Diff não oferece uma visualização de diff textual.
A distinção entre objetos e arrays vem do formato: a RFC 8259, seção 4 descreve objetos como coleções sem ordem; arrays são sequências ordenadas conforme a seção 5. A associação por índice é a regra específica deste comparador.
Inserir no início de um array: por que aparecem três diferenças?
Antes:
{"items":["A","B"]}
Depois:
{"items":["X","A","B"]}
A versão atual compara posições, começando pelo índice 0:
| Caminho | Tipo | Antes → depois |
|---|---|---|
$.items[0] |
Alteração | "A" → "X" |
$.items[1] |
Alteração | "B" → "A" |
$.items[2] |
Inclusão | Ausente → "B" |
O resumo esperado é 1 inclusão, 0 remoções e 2 alterações: 3 diferenças no total. A inclusão é de "B" no novo índice [2], embora você tenha adicionado "X" no início.
O algoritmo não deduz que «X foi inserido e os demais itens foram deslocados». Também não detecta movimentos nem associa itens por um campo id. Leia cada linha como uma diferença entre valores naquela posição, e não como um histórico das edições.
Propriedade ausente, null e “null”: qual é a diferença?
Compare esta entrada anterior:
{}
com esta entrada nova:
{"nota":null}
O resumo é 1 inclusão, 0 remoções e 0 alterações: 1 diferença no total:
| Caminho | Tipo | Antes → depois |
|---|---|---|
$.nota |
Inclusão | Ausente → null |
Em {} a propriedade nota não existe. Na segunda entrada ela existe e seu valor é null. Se inverter as entradas, o resultado será uma remoção no mesmo caminho.
Agora compare antes:
{"nota":null}
com depois:
{"nota":"null"}
O resumo é 0 inclusões, 0 remoções e 1 alteração: 1 diferença no total:
| Caminho | Tipo | Antes → depois |
|---|---|---|
$.nota |
Alteração | null → "null" |
A propriedade existe nos dois objetos, mas passa do valor JSON null para uma string de quatro letras. Todos esses trechos são JSON válido: validade sintática e igualdade de valores respondem a perguntas diferentes.
O que um diff vazio significa e o que fica de fora
Uma comparação concluída sem diferenças indica que os valores representados foram considerados iguais segundo essas regras. Isso não prova que o texto original seja idêntico nem que uma aplicação se comporte da mesma forma. Para decidir quais alterações são esperadas e quais exigem investigar uma regressão, consulte o guia para comparar respostas JSON de uma API.
Números e limites: o comparador usa números de JavaScript; números muito grandes ou com muita precisão podem perdê-la durante a análise. A ferramenta exibe um aviso quando detecta esse risco e não oferece precisão numérica arbitrária. Exige JSON estrito e rejeita chaves duplicadas. Cada entrada admite até 1.000.000 de unidades UTF-16 e 200 níveis de aninhamento; a comparação admite até 1.000 registros de alteração e tem um orçamento de trabalho. Se atingir um limite, reduza a amostra: uma operação que falhou não prova igualdade. A página do JSON Diff detalha os limites atuais.