JSON Diff (Comparar)
Compare dois arquivos JSON instantaneamente no navegador. Destaque lado a lado, saída JSON Patch (RFC 6902), ignore campos ruidosos como timestamps e IDs. 100% privado, sem upload.
Opções Avançadas
O que é JSON Diff?
JSON Diff é uma comparação estrutural de dois documentos JSON que respeita o modelo de dados do JSON — chaves são desordenadas, tipos são estritos e arrays podem ser ordenados ou identificados por chave. Ao contrário de um diff de texto (que compara linhas e reporta reordenações de chaves ou espaços em branco como diferenças), um JSON diff produz resultados semanticamente significativos.
A forma canônica legível por máquina é o JSON Patch (RFC 6902), um array de operações ordenadas (add, remove, replace, move, copy, test) que transforma um documento em outro. Os caminhos usam JSON Pointer (RFC 6901). Relacionado: JSON Merge Patch (RFC 7396) — mais simples, mas não consegue distinguir 'remover chave' de 'definir chave como null'. Esta ferramenta produz RFC 6902.
Igualdade profunda de JSON em JavaScript é mais difícil do que parece. JSON.stringify(a) === JSON.stringify(b) falha com reordenação de chaves, e engana com -0 vs 0 (ambos se serializam como "0"). Um diff correto deve percorrer ambas as árvores em paralelo usando a união de conjuntos de chaves, distinguir null de ausente via o operador 'in', e decidir o que 'igual' significa para números (Object.is por padrão, epsilon para tolerância).
Esta ferramenta roda inteiramente no seu navegador. As entradas nunca saem da sua máquina. Seguro para respostas de API, schemas internos e configurações proprietárias.
Trabalhando com ferramentas JSON adjacentes? Formate com o Formatador JSON; converta com JSON para YAML e YAML para JSON.
// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';
// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)
// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences
// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }] Funcionalidades Principais
Lado a Lado + JSON Patch
Duas visualizações a partir de um diff: destaque visual para revisão, patch RFC 6902 para automação.
Ignorar Campos Ruidosos
Presets com um clique removem /createdAt, /updatedAt, /*Id, /*At, requestId, traceId. Padrões personalizados de Extended JSON Pointer são suportados.
Combinar Arrays por Chave
Compare arrays de objetos por um campo id em vez de por índice — para envs do K8s, entradas de package-lock ou qualquer lista logicamente desordenada.
Estrito com Tipos por Padrão
1 ≠ "1". null ≠ ausente. Detecte desvios de serialização de backend no momento em que aparecem em um fixture de teste.
100% Baseado no Navegador
As entradas nunca saem da sua máquina. Sem upload, sem localStorage de JSON, sem análise do que você cola.
Compartilhe o Link, Não os Dados
Share Link escreve apenas sua configuração na URL. Suas entradas JSON permanecem locais.
Exemplos
Regressão de Resposta de API
{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}} {"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}} Duas alterações (name + createdAt). Adicione /user/createdAt em Ignorar caminhos e apenas a mudança de nome permanece.
Auditoria de Arquivo de Config (Reordenação de Chaves)
{"a":1,"b":2,"c":3} {"c":3,"a":1,"b":2} Mesmos dados, ordem de chaves diferente. O JSON Diff trata a ordem das chaves como semanticamente irrelevante — o diff é vazio.
Array de Objetos (Combinar por Chave)
[{"id":1,"qty":3},{"id":2,"qty":5}] [{"id":2,"qty":5},{"id":1,"qty":4}] Mude o modo de Array para 'Combinar por chave' com key=id. Sem alinhamento, cada elemento parece alterado; com alinhamento, apenas qty no id=1 muda.
Saída JSON Patch (RFC 6902)
{"items":[{"id":1,"price":29.99}]} {"items":[{"id":1,"price":24.99}]} Mude para a aba JSON Patch para obter [{"op":"replace","path":"/items/0/price","value":24.99}] que você pode aplicar com fast-json-patch.
Como Usar
- 1
Cole os dois documentos JSON
Cole o JSON original (esquerda) e o modificado (direita). O diff ao vivo é renderizado enquanto você digita; entradas grandes (>200 KB) mudam para um botão Diff manual.
- 2
Filtre o ruído
Clique em um preset (Timestamps / IDs / Trace) ou cole padrões de Extended JSON Pointer em Ignorar caminhos para eliminar campos irrelevantes.
- 3
Escolha a visualização que você precisa
Lado a Lado para revisão humana, JSON Patch (RFC 6902) para operações aplicáveis por máquina. Use Share Link para enviar a configuração a um colega.
Armadilhas Comuns do Diff
Ruído de Ordem de Chaves (Sintoma de Diff de Texto)
Se sua ferramenta de diff reporta {"a":1,"b":2} vs {"b":2,"a":1} como diferentes, ela está fazendo diff de linha, não diff de JSON. Chaves JSON são desordenadas — esta ferramenta ignora a ordem de chaves automaticamente.
diff a.json b.json # text diff: 'everything changed'
JSON Diff (this tool): 0 differences
Confusão entre Null e Ausente
{"a":null} e {} não são iguais. Tratá-los como iguais mascara bugs reais de backend.
{"a": null} == {} # collapsed by some tools {"a": null} ≠ {} # type-strict diff Ordem de Array Sem Alinhamento por Chave
[{id:1},{id:2}] vs [{id:2},{id:1}] não é '2 alterações' para um conjunto lógico. O Sequencial reporta assim; mude para Combinar por chave.
Sequential diff: 4 modified
Match by key (id): 0 differences
Desvio de Tipo (Número vs String)
Backends às vezes serializam IDs inconsistentemente — 42 vs "42". A ferramenta sinaliza esses como modificações de 'tipo' para que você detecte o desvio cedo.
{"id": 42} vs {"id": "42"} # serialization bug Diff reports 'modified (type)' with both values
Precisão de Ponto Flutuante
0.1 + 0.2 !== 0.3 em IEEE 754. Com tolerance=0 (padrão), isso é sinalizado. Defina tolerance como 1e-9 se você pretende equivalência numérica.
tolerance=0: 0.30000000000000004 ≠ 0.3
tolerance=1e-9: equal
Ruído de Timestamp e UUID
createdAt, updatedAt, requestId, traceId mudam em cada requisição. Use os presets de Ignorar caminhos para descartá-los.
Diff: 47 modifications (45 are timestamps)
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes
Casos de Uso Comuns
- Regressão de Resposta de API
- Compare respostas de staging vs produção; ignore timestamps e IDs de requisição para exibir apenas alterações significativas no payload.
- Falhas em Testes de Snapshot de CI
- Cole o real vs esperado de um snapshot falhando no Jest/Vitest. Filtre o ruído e encontre a mudança real em segundos.
- Conflitos de package-lock / yarn.lock
- Resolva conflitos de merge alinhando dependências por nome; ordem de chaves e campos não relacionados deixam de ser ruído.
- Auditoria de Valores K8s / Helm
- Combine envs, volumeMounts e ports por nome. Detecte ordenações não intencionais vs edições reais de configuração.
- Cobertura de Tradução i18n
- Faça diff estrutural de en.json contra zh.json para encontrar chaves de tradução faltando ou extras sem ruído de valores.
- Revisão de Plano Terraform / CDK
- Compare a saída do plano entre execuções; a tolerância numérica lida com aritmética de ponto flutuante, ignore caminhos descartam ARNs e timestamps.
Detalhes Técnicos
- Saída de Patch Compatível com RFC 6902
- Gera operações JSON Patch válidas (add/remove/replace) com caminhos RFC 6901. Verificado contra fast-json-patch@3.x e os pacotes npm rfc6902.
- Travessia Iterativa
- Travessia com pilha explícita (sem recursão) limitada a 100.000 nós e profundidade 64 para evitar estouro de pilha em entradas adversariais.
- Igualdade Numérica com Object.is
- A tolerância numérica padrão é 0 — usa Object.is para que -0 e +0 sejam distinguidos. Defina tolerância > 0 para igualdade baseada em epsilon.
Boas Práticas
- Filtre Antes de Revisar
- Adicione Ignorar caminhos primeiro (timestamps, IDs, campos de trace), depois leia o diff. Revisar diffs ruidosos treina o olho a pular — e perder — mudanças reais.
- Combinar por Chave para Conjuntos Lógicos
- Se seu array representa um conjunto desordenado (envs, usuários, dependências), use Combinar por chave. Diff sequencial em conjuntos lógicos quase sempre está errado.
- Compartilhe o Link, Não as Entradas
- Use Share Link para enviar a um colega sua configuração de filtro — nunca cole JSON sensível em documentos compartilhados. A URL contém apenas a configuração.
Perguntas Frequentes
Por que meu diff mostra tudo alterado quando só mudei um campo?
Como ignoro timestamps e IDs no JSON diff?
Qual é a diferença entre JSON Patch e um diff visual?
O JSON diff trata null e chaves ausentes da mesma forma?
Como os arrays são comparados — por índice ou por chave?
Posso exportar o diff como JSON Patch (RFC 6902)?
O JSON Patch é igual ao JSON Merge Patch (RFC 7396)?
Como comparo dois arquivos JSON grandes (>10 MB)?
A ferramenta envia meu JSON para um servidor?
Por que 42 é diferente de "42" no diff?
Posso fazer diff de JSON com comentários (JSONC) ou vírgulas no final?
Como comparo arrays aninhados de objetos por uma chave como id?
O diff lida com precisão de ponto flutuante (0.1 + 0.2)?
Ferramentas relacionadas
Ver todas as ferramentas →Decodificador e Codificador Base64
Codificação e Formatação
Decodifique e codifique Base64 online gratuitamente. Conversão em tempo real com suporte completo a UTF-8 e emoji. 100% privado — executa no seu navegador. Sem necessidade de cadastro.
Formatador e Validador JSON
Codificação e Formatação
Formate, valide e embeleze JSON instantaneamente no seu navegador. Ferramenta online gratuita com validação de sintaxe, detecção de erros, minificação e cópia com um clique. 100% privado — seus dados nunca saem do seu dispositivo.
Conversor JSON para YAML
Codificação e Formatação
Cole JSON e obtenha YAML instantaneamente. Conversão ao vivo no navegador. K8s/Compose, indentação 2/4 espaços, Norway-safe. 100% privado, sem upload.
Codificador e Decodificador de URL com Analisador Integrado
Codificação e Formatação
Cole uma URL para decodificar ou codificar em tempo real. Analisador de URL integrado decompõe cada componente em campos editáveis. Modo duplo: encodeURI e encodeURIComponent. Privado — nenhum dado enviado a servidor.
Conversor YAML para JSON
Codificação e Formatação
Cole YAML e obtenha JSON instantaneamente. Conversão ao vivo no navegador. Suporte a manifestos K8s, OpenAPI e valores Helm. 100% privado, sem upload.
Conversor de Base Numérica — Binário, Hex, Decimal e Octal
Ferramentas de Conversão
Converta números entre binário, hexadecimal, decimal, octal e qualquer base personalizada (2-36) instantaneamente. Gratuito, privado, sem cadastro — todo o processamento acontece no seu navegador.