Diff de JSON
Cole dois documentos JSON — os caminhos alterados aparecem na hora, sem botão, sem upload.
Diferenças0caminhos adicionados0valores alterados0caminhos removidos
Como usar
- Cole o JSON antigo em “JSON original” e o novo em “JSON alterado” — cada caminho adicionado, removido ou alterado aparece enquanto você digita, sem botão para clicar.
- Ordem de chaves, 1 vs 1.0, 1e0 vs 1 e \u00e9 vs é não são diferenças: a comparação é estrutural. Se precisar revisar formatação ou ordem de chaves, use a ferramenta de diff de texto.
- Use “Copiar diff” para levar a lista completa: cada linha é +, - ou ~ seguida do caminho e do valor completo, pronta para um chamado ou e-mail.
Exemplo
Dois documentos
【Original】
{"pedido":"A-2026-001","cliente":{"nome":"Ana","cidade":"São Paulo"},"total":1299.5,"pago":false}
【Alterado】
{"pedido":"A-2026-001","cliente":{"nome":"Ana","cidade":"Recife"},"total":1399.0,"pago":true,"cupom":"BEMVINDO10"}Diferenças
+ $.cupom "BEMVINDO10" ~ $.cliente.cidade "São Paulo" → "Recife" ~ $.total 1299.5 → 1399.0 ~ $.pago false → true (+1 ~3 −0)
As linhas 【Original】/【Alterado】 são títulos de exemplo; no uso real os dois documentos vão para as duas caixas de entrada. Apenas mudanças reais de valor são listadas: o número do pedido e o nome do cliente, inalterados, não aparecem, e a ordem das chaves nunca é uma diferença.
Regras, limites e problemas conhecidos
- Este é um diff estrutural, não um diff de texto: a ordem das chaves de objeto é ignorada; 1, 1.0 e 1e0 são o mesmo número; "\u00e9" e "é" são a mesma string. Use a ferramenta de diff de texto se mudanças de formatação importarem.
- Números são comparados como decimais exatos, nunca pelo Number do JavaScript: 9007199254740993 permanece exato e 1e400 não vira Infinity. A lista ainda mostra o número exatamente como você digitou.
- Strings são comparadas pelo valor decodificado e exibidas na forma JSON padrão; chaves duplicadas mantêm o último valor, como o JSON.parse faz, e um aviso informa quantas duplicatas foram encontradas.
- Arrays são ordenados: inserções e exclusões são alinhadas, então acrescentar um item no topo é uma linha “+”, não uma mudança em todos os itens seguintes. Movimentações aparecem como uma remoção mais uma adição, e não há opção “ignorar ordem do array”.
- Adicionar ou remover uma subárvore inteira é um único caminho. Valores muito longos aparecem na tela como “objeto · N chaves” ou “array · N itens”, enquanto “Copiar diff” sempre contém o valor completo.
- “Copiar diff” produz uma lista de mudanças em texto simples (+ / - / ~, caminho, valor completo), não um JSON Patch. Inserções e exclusões em arrays deslocam os índices seguintes, então um JSON Patch ingênuo não se aplicaria.
- Os caminhos usam a forma $.a.b[0]. Itens removidos apontam para o índice antigo; itens adicionados e alterados apontam para o documento novo.
- Limites: os resultados são atualizados cerca de 0,6 s depois de você parar de digitar acima de 200.000 caracteres somados; um documento com mais de 1.000.000 de caracteres ou aninhamento acima de 256 níveis é reportado como erro, nunca truncado. Arrays acima do limite de alinhamento são comparados por índice e um aviso diz isso; no máximo 400 linhas de mudança são renderizadas, mas copiar sempre traz a lista completa.
- Sem upload de arquivo, sem carregar URL, sem consulta JSON Schema ou JSONPath, sem histórico e sem links de compartilhamento. Tudo roda no seu navegador: nada é enviado ou armazenado.
- Em páginas em chinês, japonês e coreano, “Pontuação de largura total” vem ativada por padrão: a pontuação fora das strings é convertida para ASCII, enquanto o conteúdo das strings fica exatamente como digitado.
Ferramentas de desenvolvimento relacionadas
O que as pessoas costumam precisar depois de comparar os dois documentos.