Como usar
- Cole o JSON original à esquerda e o JSON alterado à direita, ou experimente o exemplo.
- Escolha como os arrays são comparados: por posição ou correspondendo itens, para que um item inserido seja relatado uma única vez.
- Leia as diferenças como lista ou lado a lado. Cada uma tem um caminho a partir da raiz ($).
- Copie o relatório para colar em um ticket ou em uma revisão de código.
Como funciona
Ambos os documentos são analisados e comparados como dados, não como texto. Os objetos são comparados campo por campo, portanto a ordem das chaves e os espaços em branco ou a indentação não importam. Os números são comparados por valor, então 1 e 1.0 são iguais.
Cada diferença tem um caminho escrito como uma expressão JSONPath: $ é a raiz, .name é uma propriedade, [2] é um índice de array, e chaves que não são nomes simples são colocadas entre aspas, como em $["first-name"]. Quatro tipos de diferença são informados: adicionado (apenas à direita), removido (apenas à esquerda), alterado (mesmo tipo, valor diferente) e tipo alterado (por exemplo, o número 44.9 virou a string "44.90", ou um valor virou null). Quando um objeto ou array inteiro é adicionado ou removido, isso é informado uma vez no próprio caminho, em vez de uma vez por campo.
Por padrão, os arrays são comparados por posição: item 0 com item 0, item 1 com item 1. Se um item é inserido no início, todos os itens seguintes parecem alterados. “Combinar itens movidos” primeiro alinha os dois arrays usando a maior subsequência comum de itens iguais, para que uma inserção ou exclusão seja informada apenas uma vez e os itens restantes sejam emparelhados. Itens adicionados usam seu índice à direita; itens removidos usam seu índice à esquerda. A correspondência é ignorada em arrays muito grandes (acima de cerca de 2 milhões de pares de itens), que então são comparados por posição.
Os caminhos das chaves na lista são ordenados alfabeticamente dentro de cada objeto. Até 2.000 diferenças são exibidas; o relatório copiado sempre contém todas elas.
Exemplos
Verificando uma mudança em uma API
Compare a resposta de ontem e de hoje para o mesmo pedido. O diff mostra $.status alterado de "pending" para "shipped", $.total com tipo alterado de número para string, $.coupon removido e $.customer.phone adicionado.
Desvio de configuração
Cole a configuração JSON de staging e de produção. Como a ordem das chaves é ignorada, aparecem apenas diferenças reais, como $.cache.ttl 300 → 60, mesmo que os arquivos tenham sido salvos por ferramentas diferentes.
Listas com um item inserido
Uma lista de produtos ganhou um novo primeiro item. Por posição, todos os produtos aparecem como alterados; com “Corresponder itens movidos”, o resultado é um único “Adicionado $[0]”.
Perguntas frequentes
Como isso é diferente de um diff de texto?
Um diff de texto compara linhas, então reordenar chaves ou reformatar aparece como alteração. Esta ferramenta compara os dados processados; portanto, apenas diferenças de valores, tipos e estrutura são relatadas.
Por que um array mostra muitas alterações depois de uma inserção?
No modo “Por posição”, os itens são comparados pelo mesmo índice, e uma inserção desloca todos os itens seguintes. Alterne para “Corresponder itens movidos” para alinhar primeiro os itens iguais.
“1” e 1 são tratados como iguais?
Não. Um é string e o outro é número, então a diferença é relatada como mudança de tipo. Valores com o mesmo tipo são comparados exatamente.
Posso comparar arquivos muito grandes?
Arquivos de alguns megabytes funcionam, mas tudo é processado na memória do seu navegador, então documentos muito grandes podem ficar lentos em celulares.
Privacidade
Os dois documentos são processados e comparados apenas no seu navegador. Nada é enviado, armazenado ou incluído em análises.