Pack Camo

JSON Diff: Compare Dois Documentos JSON

Compare dois documentos JSON pela estrutura, não por linha. Tudo roda localmente — nada é enviado para servidor nenhum.

Entrada
Two JSON documents
Saída
Path-level changes · JSON Patch

Original

válido

Alterado

válido

Diferenças

6 mudanças

  • Alterado/version

    − 1

    + 2

  • Adicionado/settings/language

    + "en"

  • Adicionado/users/0

    + {"id":3,"name":"Grace","email":"grace@example.com"}

  • Alterado/users/1/email

    − "ada@example.com"

    + "ada@example.org"

  • Removido/users/1

    − {"id":2,"name":"Linus","email":"linus@example.com"}

  • Tipo alterado/limitstring → número

    − "100"

    + 100

Compare JSON pelo significado, não pelo texto

Esta ferramenta de JSON diff compara dois documentos JSON como dados. Os objetos são pareados chave a chave em qualquer ordem, formatação e indentação são ignoradas, e cada diferença é listada com o caminho exato, o tipo de mudança e os valores antigo e novo. Arrays de registros podem ser pareados por um campo id, para que uma lista reordenada ou uma linha inserida no topo não apareça como se tudo tivesse mudado. Exporte o resultado como um JSON Patch RFC 6902 ou um relatório em texto simples. Os dois documentos ficam no seu navegador; nada é enviado.

Como comparar dois arquivos JSON

  1. Cole o JSON original à esquerda e o novo à direita, ou solte um arquivo .json em cada lado.
  2. Corrija qualquer erro de análise mostrado acima de um painel; ele informa a linha e a coluna.
  3. Leia a lista de mudanças, cada uma com o caminho JSON Pointer como /users/2/email, ou mude para a visão em árvore para vê-las no contexto.
  4. Ative Parear itens de array por chave e informe o campo que identifica um registro, normalmente id.
  5. Filtre por adicionado, removido, alterado ou tipo alterado e copie o JSON Patch ou baixe um relatório em texto.

Por que um diff de texto é a ferramenta errada para JSON

Dois documentos JSON podem ser idênticos como dados e completamente diferentes como texto. Uma API devolve as chaves em outra ordem, um arquivo está minificado e o outro formatado, um escreve 1.0 onde o outro escreve 1. Um comparador de textos por linhas marca tudo isso. Um diff estrutural analisa os dois lados primeiro e compara os valores, então só mudanças reais são informadas: uma chave adicionada ou removida, um valor alterado ou um valor cujo tipo mudou, como a string "42" virando o número 42.

Os números são comparados pelo valor com precisão total, então 1.50 é igual a 1.5, enquanto dois IDs de 20 dígitos que diferem no último dígito continuam aparecendo como diferentes, o que uma comparação via números JavaScript deixaria passar.

Adicionado
A chave ou o item do array só existe no novo documento.
Removido
A chave ou o item do array só existe no documento original.
Alterado
Mesmo lugar, mesmo tipo, valor diferente.
Tipo alterado
O valor virou outro tipo JSON, por exemplo um objeto virou array ou um número virou string.

Comparando arrays: por posição ou por chave

Por padrão, os itens de array são comparados posição a posição: item 0 com item 0, item 1 com item 1. Isso é certo para listas em que a ordem importa, como coordenadas ou etapas. Para listas de registros, não: insira um usuário no topo e todos os usuários depois dele aparecem como alterados.

Com Parear itens de array por chave, os itens são pareados por um campo identificador, id por padrão. Cada registro é comparado com o registro de mesmo id onde quer que ele esteja, então o resultado diz que um usuário foi adicionado e um e-mail mudou. O pareamento só é usado quando todos os itens dos dois lados são objetos com uma string ou número único nesse campo; caso contrário, o array é comparado por posição.

A visão em árvore mostra os dois documentos fundidos em um único esquema. Ramos com mudanças abrem automaticamente e os sem mudanças ficam recolhidos, com adições em verde, remoções em vermelho e valores alterados como antigo → novo. Desligue Só mudanças para ver as chaves sem alteração em volta, para dar contexto.

Caminhos, JSON Pointer e JSON Patch

Cada mudança é localizada com um JSON Pointer (RFC 6901): um caminho separado por barras a partir da raiz, como /orders/0/total, em que os itens de array são numerados a partir de zero e os caracteres ~ e / em uma chave são escritos ~0 e ~1. Um caminho vazio significa o documento inteiro.

A exportação é um JSON Patch (RFC 6902): uma lista de operações add, remove e replace que transforma o documento da esquerda no da direita quando aplicadas em ordem. Bibliotecas como fast-json-patch, jsonpatch para Python e o suporte a patch do Kubernetes o aplicam diretamente. As remoções em arrays são escritas do maior índice para o menor, para que o índice de cada operação ainda esteja correto quando ela rodar.

Para organizar qualquer um dos documentos antes, formate-o com o formatador JSON; para converter o resultado em YAML ou CSV, use o conversor de dados.

Perguntas frequentes

Como comparar dois arquivos JSON?
Cole ou solte o JSON original à esquerda e o novo à direita. Cada diferença é listada com o caminho, o tipo de mudança e os valores antigo e novo.
A ordem das chaves importa ao comparar JSON?
Não. Os objetos são comparados chave a chave, então as mesmas chaves em outra ordem são iguais. Espaços e indentação também são ignorados.
Como comparar arrays JSON quando a ordem mudou?
Ative Parear itens de array por chave e informe o campo que identifica cada item, como id. Os itens passam a ser pareados por esse valor em vez da posição.
O que é um JSON Patch?
Um JSON Patch, definido na RFC 6902, é um array JSON de operações como add, remove e replace, cada uma com um caminho. Aplicá-lo ao documento original produz o novo.
O que significa tipo alterado?
O valor naquele caminho virou outro tipo JSON, por exemplo um número virou string ou um objeto virou array. Normalmente indica um bug em quem gerou os dados.
Posso comparar arquivos JSON grandes?
Sim. Arquivos de vários megabytes são comparados em bem menos de um segundo em um computador comum, porque a análise e a comparação rodam localmente no seu navegador.
Meu JSON é enviado?
Não. Os dois documentos são analisados e comparados no seu navegador e nunca enviados a lugar nenhum, então é seguro comparar respostas de API com dados pessoais ou segredos.