Comparação estrutural de JSON

Compare duas estruturas JSON e confira adições, remoções e alterações em caminhos explícitos, preservando a escrita dos números sem arredondamento.

Esta página mostra as ferramentas disponíveis neste idioma dentro do escopo atual. Isso não significa que todas as ferramentas do site estejam traduzidas para todos os idiomas.

O processamento é local, sem enviar as entradas nem salvá-las automaticamente. Cada entrada tem um limite de 256 KiB em UTF-8, 512 KiB no total; profundidade 32, 30.000 valores por entrada, 2000 diferenças e um relatório de 1 MiB. A comparação é interrompida após 5 segundos.

A ordem das chaves de um objeto não influencia a comparação. Os arrays são comparados por índice, sem detectar movimentações. Os números são comparados pela forma como estão escritos: 1, 1.0 e 1e0 são diferentes, sem arredondar números grandes. As strings JSON são decodificadas para comparação sem normalização Unicode. Alterar o tipo de um ramo, adicioná-lo ou removê-lo produz uma linha com o ramo completo.

Entradas da comparação

Como usar

Cole os textos JSON anterior e posterior e compare-os. Confira o tipo de alteração, o caminho e o texto JSON antes e depois de cada alteração; navegue pelas páginas da prévia quando necessário. Copie o relatório completo ou baixe-o como json-diff.json usando a ação correspondente. Editar uma entrada invalida o resultado anterior; o relatório não substitui nenhuma entrada.

Exemplo prático

Antes: {"n":1,"a":[1,2]}; depois: {"a":[2,1],"n":1.0}. Há três alterações: /n do texto 1 para o texto 1.0, /a/0 de 1 para 2 e /a/1 de 2 para 1. Mudar apenas a ordem das duas chaves do objeto não acrescenta nenhuma alteração. A chave a/b~c aparece em /a~1b~0c.

Compatibilidade e limites

A ordem das chaves de um objeto não influencia a comparação, mas os arrays são comparados por índice; não são inferidas movimentações de itens nem correspondências de conjuntos. Os números são comparados pela escrita original: 1, 1.0 e 1e0 são diferentes e nunca são convertidos em Number. As strings JSON são decodificadas para comparação sem normalização Unicode. Adicionar ou remover um ramo, ou alterar seu tipo, produz uma linha que contém o ramo completo. Um caminho vazio indica a raiz; JSON Pointer representa ~ como ~0 e / como ~1. Os campos before e after do relatório são strings que contêm JSON compacto, não valores numéricos arredondados. Um campo é omitido quando aquele lado está ausente, enquanto JSON null é representado pela string "null". O relatório descreve diferenças; não é um JSON Patch para aplicar alterações. O processamento ocorre no navegador sem executar o conteúdo JSON, enviá-lo nem salvá-lo ou copiá-lo automaticamente.

Perguntas frequentes

Um resultado igual significa que os textos são idênticos byte a byte?

Não. Os espaços fora das strings, a ordem das chaves de um objeto e as formas de escape dos caracteres podem ser diferentes, mesmo que os valores sejam iguais segundo esta política. Nesse caso, a lista changes fica vazia, e o relatório ainda pode ser copiado ou baixado. Por outro lado, uma escrita diferente de um número ou uma ordem diferente dos elementos de um array conta como diferença, mesmo quando o significado parece semelhante.

Ferramentas relacionadas