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
- Cole o JSON original à esquerda e o novo à direita, ou solte um arquivo
.jsonem cada lado. - Corrija qualquer erro de análise mostrado acima de um painel; ele informa a linha e a coluna.
- 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. - Ative Parear itens de array por chave e informe o campo que identifica um registro, normalmente
id. - 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.