Ir para o conteúdo principal

JSON Diff

Compare dois documentos JSON e veja o que mudou.

Original

Lin 1, Col 1
JSON

Alterado

Lin 1, Col 1
JSON

Resultado

Seu resultado aparecerá aqui

Adicione JSON nas duas entradas acima e escolha Comparar.

Aguardando entrada

Compare dois documentos JSON pela estrutura, ignorando a ordem das chaves, e veja todos os caminhos adicionados, removidos e alterados em uma lista.

O que é o JSON Diff?

O JSON Diff é uma ferramenta online gratuita que compara dois documentos JSON pela estrutura, no seu navegador, e lista cada valor adicionado, removido ou alterado, cada um com o seu caminho. A ordem das chaves não importa, e 1, 1.0 e 1e0 contam como o mesmo número.

Use para ver o que mudou entre duas respostas de API, dois arquivos de configuração ou duas versões dos mesmos dados, sem o ruído de uma reformatação.

O que ela aceita

  • Dois documentos JSON de qualquer tipo: um objeto, uma lista, um texto, um número, true, false ou null pode ser o nível principal.
  • Os objetos são comparados por chave, então a ordem das chaves é ignorada, e a lista de diferenças é ordenada por chave.
  • As listas são comparadas por posição: o item 0 com o item 0, o item 1 com o item 1 e assim por diante. Um item que existe em apenas uma das listas é informado como adicionado ou removido na sua posição.
  • Os números são comparados pelo valor decimal exato, sem arredondamento: 1, 1.0 e 1e0 são iguais, -0 é igual a 0, e 9007199254740993 é diferente de 9007199254740992. Os textos são comparados pelo valor, então "\u0041" e "A" são iguais.
  • Cada diferença é uma linha: + caminho: valor para um valor adicionado, - caminho: valor para um removido e ~ caminho: antes -> depois para um alterado. Um valor que é um objeto ou uma lista é escrito de forma compacta, na mesma linha.
  • Os caminhos são JSON Pointers (RFC 6901) depois de um #: #/a/b é o membro b de a, #/tags/1 é o item 1 de tags, e # sozinho é o documento inteiro. Uma / em uma chave é escrita ~1 e um ~ é escrito ~0.
  • Um valor cujo tipo mudou, como um número que vira texto, ou um objeto que vira uma lista, é uma única alteração no seu caminho. A ferramenta não olha dentro dele.

Bom saber

  • A ordem das listas importa. Duas listas com os mesmos itens em outra ordem são informadas como alterações em cada posição que difere. Não existe “movido” nem correspondência de itens por um id.
  • Um nome repetido dentro de um objeto, ou uma string com um escape substituto (surrogate) sem par, é recusado em qualquer uma das entradas, em vez de deixar um valor vencer.
  • A comparação é de dados, não de texto: espaços, indentação e escapes como \u0041 não são diferenças. Quando você precisar deles, use uma ferramenta de diff de texto.
  • Os valores são mostrados como estão escritos na fonte, então 1.50 aparece como 1.50 na lista mesmo sendo igual a 1.5.
  • Uma lista de diferenças que passaria do limite de tamanho é recusada com uma prévia incompleta (veja abaixo).

Como usar o JSON Diff?

  1. Cole ou digite o primeiro documento JSON em “Original” e o segundo em “Alterado”. Nada é executado enquanto você digita.
  2. Aperte “Comparar”.
  3. Leia o resultado ao lado das entradas: ele diz quantas diferenças foram encontradas e depois lista uma linha por diferença, com o caminho em que ela ocorre. Se os dois documentos não tiverem diferenças, o resultado diz isso. Se uma das entradas não puder ser usada, a mensagem diz qual é e informa a linha e a coluna.
  4. Aperte “Copiar” para colocar a lista na área de transferência, ou “Baixar” para salvá-la como differences.txt.

Exemplos

Adicionado, removido e alterado

Coloque o primeiro documento em “Original”, o segundo em “Alterado” e aperte “Comparar”. Cada linha começa com um sinal: - para um valor que só o original tem, + para um valor que só o documento alterado tem e ~ para um valor que está nos dois com conteúdo diferente. As chaves do segundo documento estão em outra ordem, o que não faz diferença, e a lista é ordenada por chave. #/tags/1 é o item na posição 1 de tags, contando a partir de 0.

{
  "name": "Ada",
  "age": 36,
  "tags": [
    "math"
  ],
  "city": "London"
}
{
  "city": "London",
  "name": "Ada Lovelace",
  "tags": [
    "math",
    "poetry"
  ],
  "email": "ada@example.com"
}
- #/age: 36
+ #/email: "ada@example.com"
~ #/name: "Ada" -> "Ada Lovelace"
+ #/tags/1: "poetry"

Um erro de sintaxe em uma das entradas

O documento em “Alterado” tem uma vírgula antes da chave de fechamento, o que o JSON não permite. A ferramenta recusa, diz qual entrada está errada e informa a linha e a coluna. Nada é comparado até que os dois documentos sejam válidos.

{"a": 1}
{"a": 1,}

O JSON não permite vírgula antes de uma chave ou colchete de fechamento (vírgula final).

Linha 1, coluna 9

Os mesmos dados, escritos de outro jeito

As chaves estão em outra ordem, e 10 está escrito como 1e1 e 2 como 2.0. Os números são comparados pelo valor exato e a ordem das chaves não conta, então a ferramenta informa que não há diferenças.

{"price": 10, "qty": 2}
{"qty": 2.0, "price": 1e1}

Os dois documentos JSON são idênticos.

As listas são comparadas por posição

As duas listas têm os mesmos itens em outra ordem. Os itens são comparados posição por posição, então a ferramenta informa duas alterações, em #/0 e #/1, e não uma mudança de lugar.

["a", "b"]
["b", "a"]
~ #/0: "a" -> "b"
~ #/1: "b" -> "a"

Chaves com barra

Uma chave que contém / é escrita com ~1 no caminho, e ~ com ~0, como a RFC 6901 exige, para que um caminho nunca seja ambíguo. Aqui a chave é a/b.

{"a/b": 1}
{"a/b": 2}
~ #/a~1b: 1 -> 2

Limites e privacidade

Limites de tamanho

  • Entrada: cada caixa aceita até 2.000.000 bytes de texto em UTF-8 (cerca de 2 MB), contados separadamente. Letras acentuadas e emojis ocupam mais de um byte cada. Uma entrada maior é recusada.
  • Resultado: também até 2.000.000 bytes. Se o resultado completo fosse maior, a ferramenta mostra apenas uma prévia incompleta dos primeiros 100.000 bytes, e essa prévia não pode ser copiada nem baixada.
  • Aninhamento: até 256 níveis de objetos e listas dentro uns dos outros. Um JSON mais profundo é recusado porque passa do que a ferramenta processa.
  • Tempo: uma execução que demora mais que o seu limite de tempo é interrompida. Tente uma entrada menor.

Meu texto é enviado para um servidor?

Não. O texto que você digita ou cola, ou abre de um arquivo local, é processado localmente no seu navegador, em um Web Worker dedicado. Ele nunca é enviado para o servidor (um arquivo que você abre é lido apenas no seu navegador) e não é gravado em armazenamento, cookies nem na barra de endereços.

“Copiar” coloca o resultado na área de transferência e “Baixar” o salva como arquivo, mas só quando você aperta o botão. O arquivo é criado no seu navegador, então nada é enviado.

Para ver os detalhes completos, consulte a Política de Privacidade

Ferramentas e páginas relacionadas

O seu texto continua na página quando você troca de ferramenta na mesma aba, então dá para testar o mesmo texto em outra. Recarregar ou fechar a aba o encerra.

Todas as ferramentas