Ferramenta de Comparação JSON - Compare JSON Online Grátis | Diferenças JSON
Compare JSON online gratuitamente com nossa ferramenta rápida de comparação JSON. Encontre diferenças instantaneamente com resultados coloridos. Diff JSON 100% seguro, baseado no navegador. Sem necessidade de cadastro.
Ferramenta de Comparação JSON
Documentação
Uma ferramenta de comparação de JSON, muitas vezes chamada de ferramenta de diff de JSON, compara dois valores JSON (JavaScript Object Notation) e informa o que mudou entre eles. Ela lista cada propriedade ou item de array que foi adicionado, removido ou modificado, junto com sua localização exata nos dados. Esta página explica como funciona a ferramenta de comparação de JSON do whiz.tools, com exemplos práticos baseados em sua lógica de comparação real.
O que é a comparação de JSON?
A comparação de JSON é o processo de confrontar dois documentos JSON para encontrar diferenças. Um documento JSON é um trecho de texto formado por objetos (pares chave-valor entre chaves), arrays (listas ordenadas entre colchetes) e valores primitivos, como strings, números, booleanos e null. Comparar dois desses documentos a olho nu é lento e sujeito a erros quando passam de poucas linhas, por isso uma ferramenta de comparação faz a correspondência automaticamente e destaca cada alteração.
Desenvolvedores usam esse tipo de comparação para verificar respostas de APIs, acompanhar mudanças em arquivos de configuração, conferir se uma migração de dados não perdeu informações e revisar alterações em arquivos JSON no controle de versão.
Como a ferramenta compara dois valores JSON
A ferramenta analisa as duas entradas com um parser JSON padrão e depois percorre os dois valores resultantes em conjunto, um nível por vez. Em cada etapa, ela faz três perguntas, em ordem:
- Os dois valores têm tipos diferentes (por exemplo, um é um objeto e o outro é um número), ou um deles é
nulle o outro não? Se sim, ela registra uma modificação nesse ponto e para de comparar mais fundo. - Os dois valores são primitivos (uma string, um número, um booleano ou null)? Se sim, ela os compara diretamente. Qualquer diferença, inclusive a mudança do número
123para a string"123", conta como modificação. - Os dois valores são objetos ou os dois são arrays? Se sim, ela compara o conteúdo deles com as regras abaixo e entra recursivamente em quaisquer objetos ou arrays aninhados.
Cada diferença é registrada com um caminho, como user.address.city ou tags[1], o que facilita encontrá-la no documento original.
Comparando objetos
Para dois objetos JSON, a ferramenta reúne todas as chaves que aparecem em qualquer um dos objetos. Para cada chave:
- Se a chave existe apenas no segundo objeto, trata-se de uma propriedade adicionada.
- Se a chave existe apenas no primeiro objeto, trata-se de uma propriedade removida.
- Se a chave existe nos dois, a ferramenta compara os dois valores recursivamente.
A ordem das chaves não importa. O padrão JSON define um objeto como uma coleção não ordenada de pares nome/valor e um array como uma sequência ordenada, de modo que {"a":1,"b":2} e {"b":2,"a":1} são tratados como idênticos.
Comparando arrays
Os arrays são comparados por posição, e não por conteúdo. A ferramenta percorre os dois arrays índice por índice e compara o que estiver em cada índice, até o comprimento do array mais longo. Se um array for mais curto, os itens extras no fim do mais longo são informados como adicionados ou removidos.
Isso significa que a ferramenta nunca tenta associar itens de array pelo conteúdo. Ela não percebe que um objeto foi "movido" do índice 1 para o índice 2; só vê que o valor em cada índice mudou. Excluir ou inserir um item no meio de um array desloca todos os itens seguintes em uma posição, por isso isso costuma aparecer como várias modificações separadas, e não como uma única adição ou remoção limpa.
Exemplos resolvidos
Exemplo 1: comparando dois objetos
Primeiro JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Segundo JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Resultado:
- Modificado
user.address.city:"New York"→"Boston" - Modificado
user.address.zip:"10001"→"02108"
Exemplo 2: uma alteração de array no final
Primeiro JSON:
1{ "tags": ["important", "urgent", "review"] }
2Segundo JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2O índice 0 não mudou, o índice 1 mudou, o índice 2 não mudou e o índice 3 existe apenas no segundo array. Resultado:
- Modificado
tags[1]:"urgent"→"critical" - Adicionado
tags[3]:"documentation"
Exemplo 3: removendo um item do meio de um array
Este exemplo mostra o que acontece quando um item é removido do meio de um array, por ser uma fonte comum de confusão.
Primeiro JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Segundo JSON, com a entrada "Mouse" excluída e uma entrada "Monitor" adicionada no final:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8Uma pessoa que olhasse para isso diria "Mouse foi removido e Monitor foi adicionado". Como a ferramenta compara estritamente por índice, ela não vê dessa forma. Ela compara o índice 0 com o índice 0, o índice 1 com o índice 1 e o índice 2 com o índice 2, de modo que todo campo depois do item excluído é alinhado com o objeto errado. O resultado real são sete modificações:
- Modificado
products[0].price:999.99→899.99 - Modificado
products[1].id:2→3 - Modificado
products[1].name:"Mouse"→"Keyboard" - Modificado
products[1].price:24.99→59.99 - Modificado
products[2].id:3→4 - Modificado
products[2].name:"Keyboard"→"Monitor" - Modificado
products[2].price:59.99→349.99
Para obter um resultado mais limpo ao comparar listas como essa, ordene ou indexe os dois arrays da mesma forma antes de colá-los, por exemplo escrevendo cada lista na mesma ordem ou associando os objetos por um campo de ID antes da comparação.
O que a ferramenta não faz
- Ela não associa itens de array pelo conteúdo. Como mostrado acima, ela compara apenas pela posição do índice, portanto não consegue reconhecer que um item foi movido em vez de alterado.
- Ela não detecta referências circulares. Na prática, isso não é uma limitação: as duas entradas vêm de
JSON.parse, que sempre constrói uma árvore simples e nunca pode produzir um valor que se refira a si mesmo. Referências circulares nem sequer podem existir em um texto JSON válido. - Ela não oferece uma opção para ordenar os arrays antes de comparar. Reordenar os itens da sua entrada antes de colá-los é a única forma de evitar o efeito de deslocamento de índice descrito acima.
Como usar a ferramenta
- Cole o primeiro documento JSON na caixa da esquerda e o segundo na caixa da direita.
- A ferramenta os compara automaticamente quando as duas caixas contêm texto, ou clique em Comparar para executá-la manualmente.
- Leia a lista de resultados. Cada linha mostra um caminho, como
user.age, e se ele foi adicionado, removido ou modificado, com os valores antigo e novo exibidos lado a lado. - Clique em Copiar para copiar os resultados como texto simples.
Se qualquer uma das caixas contiver texto que não seja um JSON válido, a ferramenta mostra um erro para essa caixa em vez de uma comparação.
Perguntas frequentes
O que conta como diferença entre dois valores JSON?
Uma propriedade ou item de array é diferente se existe em apenas um dos dois documentos, ou se existe nos dois mas contém um valor diferente ou um tipo diferente. Mudar um valor do número 5 para a string "5" conta como modificação, ainda que os dois pareçam semelhantes.
A ordem das propriedades do objeto importa? Não. Os objetos JSON não têm ordem de membros definida, então dois objetos com as mesmas chaves e valores em ordem diferente são tratados como idênticos.
A ordem dos itens do array importa? Sim. Os arrays são comparados pela posição do índice, então mover um item para outra posição do array é tratado como uma série de modificações, e não como um deslocamento.
Meus dados JSON são enviados a um servidor? Não. A comparação roda no navegador, usando JavaScript. Nada é enviado.
A formatação, como indentação ou minificação, afeta o resultado? Não. As duas entradas são convertidas em valores JSON antes da comparação, então espaços em branco, indentação e quebras de linha não fazem diferença. Apenas os dados em si são comparados.
A ferramenta consegue comparar JSON com comentários ou vírgulas finais? Não. O JSON padrão, como definido na RFC 8259, não tem sintaxe para comentários, e arrays e objetos não podem ter vírgulas finais. O parser JSON do navegador rejeita essa entrada como inválida.
Referências
- Internet Engineering Task Force. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 — objetos são coleções não ordenadas de pares nome/valor, arrays são sequências ordenadas, e a gramática permite apenas espaços em branco entre os tokens.
- Mozilla Developer Network. JSON.parse(). Referência de JSON.parse() — um JSON inválido gera um SyntaxError, e arrays e objetos não podem ter vírgulas finais.