Desenvolvimento e código 100% no navegador e offline

Diff de JSON

Compare dois documentos JSON e liste cada valor adicionado, removido e alterado com o seu caminho JSON Pointer. Copie o resultado como texto ou como JSON Patch.

Cole ou digite o conteúdo; o resultado aparece na hora e os erros são exibidos abaixo do campo. Os campos já vêm com um exemplo: clique em um e digite para substituí-lo.

Seus arquivos e dados nunca saem do navegador – nada é enviado.

Os objetos são comparados por chave, então a ordem das chaves nunca conta. Os arrays são comparados por posição, a menos que você ignore a ordem. Com a ordem ignorada, um item alterado aparece como um item removido e um adicionado.

Diferenças

    Limites: 2.000.000 de caracteres por lado. Os números são lidos com JSON.parse, então inteiros além de 2^53 perdem precisão. Se uma chave aparece duas vezes no texto, vale o último valor. A lista mostra as primeiras 1.000 diferenças; os botões de copiar usam todas elas.

    Cole dois documentos JSON e leia a lista de diferenças. /users/0/name mudou, /email foi adicionado, /role foi removido: cada linha nomeia o lugar exato, então você não precisa varrer com os olhos duas paredes de chaves. Este diff de JSON compara os dados já interpretados, não o texto. Indentação e ordem das chaves nunca aparecem como mudanças.

    Lendo um diff de JSON: caminho, tipo, valor antigo e novo

    Toda diferença tem quatro partes. O caminho é um JSON Pointer, como definido na RFC 6901: /users/0/name é a chave name do primeiro item de users. Uma chave que contém uma barra é escrita com ~1, uma que contém um til com ~0. O tipo é adicionado, removido, alterado ou tipo alterado. Cada tipo tem a sua própria cor, um símbolo (+, -, ~, !) e um rótulo de texto, de modo que a lista funciona sem visão de cores. Depois vêm o valor antigo e o novo.

    Uma linha de resumo conta os tipos. Se os dois lados contêm os mesmos dados, você vê "Nenhuma diferença" no lugar.

    Valores com mais de 200 caracteres são cortados, com uma nota que diz quantos caracteres estão ocultos. O botão "Mostrar o valor completo" expande o valor no próprio lugar.

    Comparando duas respostas de API passo a passo

    1. Cole o original na caixa da esquerda e a versão alterada na caixa da direita. As duas caixas começam com um exemplo, então você vê um resultado antes de digitar.
    2. Espere um instante. A ferramenta compara 200 ms depois da sua última tecla. Se um lado não for JSON válido, a mensagem nomeia o lado, a linha e a coluna.
    3. Aperte Formatar os dois para embelezar uma entrada válida, ou Trocar os lados se você colou os arquivos ao contrário.
    4. Ligue Ignorar a ordem dos arrays se a ordem dos itens da lista não importa para você.
    5. Aperte Copiar o diff como texto para uma linha por diferença, ou Copiar como JSON Patch para um patch que um programa pode aplicar.

    Ordem das chaves, ordem dos arrays e igualdade de números

    Os objetos são comparados por chave, então {"a":1,"b":2} é igual a {"b":2,"a":1}. Os arrays são comparados por índice: [1,2,3] contra [3,2,1] dá duas mudanças, porque o item do meio é o mesmo.

    Com Ignorar a ordem dos arrays, a ferramenta monta um texto canônico para cada elemento, com as chaves ordenadas, e combina elementos iguais como um multiconjunto. Os arrays aninhados dentro dos elementos também são comparados sem ordem. O preço: um elemento que mudou por dentro aparece como um item removido e um adicionado, não como uma mudança dentro do item.

    Os números são comparados pelo valor, então 1 e 1.0 são iguais. Uma chave com null não é o mesmo que uma chave ausente. Um objeto vazio contra um array vazio é uma mudança de tipo, e 1 contra "1" também. As strings são comparadas exatamente, inclusive maiúsculas e espaços.

    Copiando o diff como um JSON Patch da RFC 6902

    O patch transforma o documento da esquerda no da direita com operações add, remove e replace. Os itens de array são removidos do maior índice para baixo e adicionados do menor índice para cima, de modo que as operações funcionem na ordem dada. Não há operação move nem copy. No modo de ordem ignorada o botão fica desativado, porque um patch aponta para os itens do array por posição.

    Para onde vai o seu JSON e o que ele não consegue ler

    A análise e a comparação rodam no seu navegador com JSON.parse. A ferramenta não envia nenhuma requisição e não guarda nada; o painel de rede do navegador mostra isso. A área de transferência só é usada quando você aperta um botão de copiar.

    Cada lado pode ter 2.000.000 de caracteres. Entradas maiores são recusadas com uma mensagem. Números além de 2^53 perdem precisão: 9007199254740993 é lido como 9007199254740992, então dois inteiros enormes diferentes podem parecer iguais. Se uma chave aparece duas vezes no texto, vale o último valor. Comentários e vírgulas finais não são JSON, e o erro mostra a linha e a coluna deles. A lista mostra as primeiras 1.000 diferenças; os botões de copiar usam todas elas. Uma marca de ordem de bytes no início é removida antes da análise.

    Perguntas frequentes (FAQ)

    Cole o JSON original na caixa da esquerda e o JSON alterado na caixa da direita. A lista de diferenças aparece depois de uma breve pausa. Cada entrada mostra o caminho, o tipo de mudança e o valor antigo e o novo.