← Voltar à ferramenta JSON

Comparar JSON

Última atualização: 2 de outubro de 2026

Compare dois documentos JSON e veja apenas o que realmente difere. Como a comparação é estrutural, reordenar chaves ou reformatar não conta; o relatório lista cada mudança real com seu caminho, dentro do navegador.

Estrutural, não textual Ordem das chaves ignorada Roda no navegador Sem upload Código aberto (MIT)

O que uma comparação estrutural vê

Os dois documentos são analisados primeiro e depois percorridos juntos. Só as diferenças nos próprios dados são reportadas: uma chave presente de um lado e ausente do outro, um valor que mudou, ou um valor cujo tipo mudou —um número que virou string, um objeto que virou array—. Espaços e ordem das chaves não participam da comparação, porque depois da análise eles deixam de existir.

Uma mudança de tipo é reportada uma vez, no caminho onde ocorre, em vez de ser desdobrada em uma remoção e uma adição para cada folha abaixo. Isso mantém o relatório legível quando uma subárvore inteira muda de forma.

Por que isto não é um diff de linhas

Um diff de texto —o que o git diff mostra— compara linhas. Para JSON isso costuma enganar. Reindentar um arquivo, ou emitir as mesmas chaves em outra ordem, é normal quando o JSON é gerado por ferramentas diferentes ou versões diferentes de uma biblioteca, e um diff de linhas transforma isso em uma parede de mudanças embora os dados sejam idênticos.

Os dois documentos abaixo são o mesmo documento. Um diff de linhas reporta quatro linhas alteradas; esta ferramenta não reporta nada:

{"a": 1, "b": 2}

{
  "b": 2,
  "a": 1
}

O contrário também vale, e é a parte útil: um único caractere alterado dentro do nome de uma chave, ou um número que passou de 3 para 4, aparece como exatamente uma mudança em vez de ficar enterrado no ruído da reformatação.

Como ler a notação de caminhos

Cada mudança é reportada com um caminho. $ é a raiz do documento; um ponto entra em uma chave de objeto e um colchete indexa um array. Assim, $.settings.indent é a chave indent dentro de settings, $.features[2] é o terceiro item do array features, e $["weird key"] nomeia uma chave que não é um identificador simples. A notação segue o estilo do JSON Pointer, então um caminho do relatório pode ser colado em outras ferramentas JSON.

O que a comparação não consegue dizer

Perguntas frequentes

A ordem das chaves importa?

Não. Os dois documentos são analisados antes de serem comparados, e as chaves dos objetos são emparelhadas por nome, não por posição. Por isso, reformatar um documento ou emitir suas chaves em outra ordem produz uma diferença vazia, como deve ser, porque os dados são os mesmos.

Por que inserir um item em um array mostrou tantas mudanças?

Arrays são emparelhados por posição, como em quase toda comparação estrutural. Inserir um item no início de um array longo desloca cada elemento seguinte um índice, então todos são reportados como alterados embora os valores apenas tenham se movido. Sem uma chave para emparelhar, nada pode saber o que foi inserido e o que foi alterado. Se seus itens tiverem um id estável, ordene os dois lados por ele antes de comparar.

O que acontece se um dos lados não for JSON válido?

A comparação para e mostra a mensagem do próprio analisador para o documento que falhou, indicando se é o da esquerda ou o da direita. Nada é comparado, porque dois documentos não podem ser percorridos juntos até que ambos sejam analisados.

Meu JSON é enviado para algum lugar?

Não. Os dois documentos são analisados com JSON.parse no seu navegador e comparados na memória. Nenhuma requisição os transporta, e não há conta nem armazenamento no servidor. Você pode carregar a página e depois desconectar da rede: a comparação continua funcionando.

Dá para saber se um valor foi movido em vez de alterado?

Não. Esta ferramenta reporta diferenças, não produz um patch. Ela não emite um documento JSON Patch nem detecta valores que foram movidos de um lugar para outro; você verá uma remoção no caminho antigo e uma adição no novo.

Posso comparar JSON com comentários ou vírgulas finais?

Não. A comparação usa o mesmo analisador estrito do resto do site, então JSON5, comentários e vírgulas finais são rejeitados. Se um documento não for analisado, passe-o primeiro pelo formatador ou pelo validador para ver onde falha.

Precisa transformar JSON em uma tabela? JSON para CSV faz isso. Encontrou um bug? Fale conosco.