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.

Compartilhar este guia

Link do artigo