Como comparar textos e JSON: diferenças, linhas alteradas e revisão

Entenda como comparar textos, JSON e trechos de código, o que significam linhas adicionadas, removidas e alteradas, quando ignorar espaços e maiúsculas, e como evitar erros em revisão técnica.

Revisado pela equipe editorial ValorFinalAlgoritmo de diff (LCS) / MDN / boas práticas de revisão
Calcule agora: Comparador de TextoResultado na hora, de graça e sem cadastro.

Comparar dois textos para descobrir o que mudou é uma das tarefas mais recorrentes de quem revisa código, contratos, configurações ou respostas de API. Um comparador (ou diff) destaca linhas adicionadas, removidas e alteradas, poupando você de reler tudo. Neste guia você entende como funciona o diff, a diferença entre comparação de texto e semântica, como comparar JSON sem ruído e quando ignorar espaços e maiúsculas. Para comparar agora, use o comparador de texto, que roda no navegador.

Resposta rápida

  • Diff mostra o que mudou: linhas adicionadas, removidas e alteradas (algoritmo LCS).
  • Para comparar JSON sem ruído, formate os dois lados com a mesma indentação antes.
  • Em objetos JSON, a ordem das chaves não muda o significado, mas muda o texto.
  • Não compare dados sensíveis em sites que enviam o conteúdo a um servidor.

O que é diff

Diff vem de difference. A ferramenta pega duas versões, A (original) e B (nova), e calcula o menor conjunto de mudanças que transforma A em B. O algoritmo clássico é a maior subsequência comum (LCS): ele encontra as linhas que se mantêm em comum e, a partir delas, deduz o que entrou e o que saiu. É o mesmo princípio por trás do Git e das revisões de pull request.

Comparação de texto x comparação semântica

A comparação de texto trata o conteúdo como uma sequência de linhas e caracteres. É rápida e funciona para qualquer texto, mas não entende significado. A comparação semântica conhece a estrutura do formato: em JSON, ela sabe que a ordem das chaves não muda o objeto; em XML, que certos nós são equivalentes. Como a maioria das ferramentas faz comparação de texto, o truque para aproximar do semântico é normalizar antes, por exemplo formatando o JSON dos dois lados.

Como comparar JSON com formatação

Imagine dois JSON com o mesmo conteúdo, mas um em uma linha e outro indentado. Uma comparação de texto pura acusaria diferenças em quase todas as linhas, embora o conteúdo seja igual. A solução é formatar ambos com a mesma indentação antes de comparar. Aí o diff destaca apenas o que mudou de verdade: um valor diferente, uma chave nova, um item removido de um array. Para isso, use o formatador de JSON antes, ou marque a opção de formatar JSON no próprio comparador.

Linha adicionada, removida e alterada

Entender a marcação evita interpretações erradas:

A contagem desses tipos dá uma medida rápida do tamanho da mudança, útil em revisões e em registros de alteração.

Ignorar espaços e maiúsculas: quando usar

Nem toda diferença importa. Ao comparar textos vindos de fontes diferentes, ignorar espaços evita que recuos e múltiplos espaços contem como mudança. Ignorar maiúsculas ajuda quando a caixa não é relevante. Em código, porém, avalie com cuidado: em muitas linguagens a indentação ou a caixa têm significado, então comparar de forma sensível pode ser o correto. Use as opções conforme o objetivo da revisão.

Casos de uso comuns

Exemplo prático

Compare estes dois textos. Versão A:

nome: Joao
plano: básico
ativo: true

Versão B:

nome: Joao
plano: premium
ativo: true
desconto: 10

O diff mostra a linha do plano como alterada (de básico para premium) e a linha de desconto como adicionada. As demais permanecem iguais. Em poucos segundos você sabe exatamente o que mudou.

GranularidadeO que destacaMelhor para
Por linhaA linha inteira que mudouCódigo e configuração
Por palavraAs palavras alteradas na linhaTextos corridos, documentação
Por caractereCada caractere que mudouDiferenças mínimas, contratos

Diff por linha, por palavra e por caractere

Nem todo diff funciona na mesma granularidade. O mais comum é o diff por linha, que marca a linha inteira como mudada quando qualquer parte dela difere. É rápido e suficiente para a maioria das revisões de código e configuração. O diff por palavra ou por caractere mostra exatamente o que mudou dentro de uma linha, o que ajuda em textos corridos, como contratos e documentação, onde uma linha pode ser longa e a alteração, mínima.

Saber a granularidade explica um comportamento que às vezes confunde: em um diff por linha, trocar uma única palavra faz a linha aparecer como removida e a nova como adicionada, ou como uma linha alterada. Isso não é erro, é a forma como o algoritmo representa a substituição. Quando você precisa enxergar a diferença palavra a palavra, vale usar uma ferramenta com esse modo ou quebrar o texto em linhas menores antes de comparar.

Outra prática útil é normalizar os dois lados antes da comparação: padronizar quebras de linha, remover espaços ao final e, no caso de JSON, formatar com a mesma indentação. Quanto mais parecida a forma, mais o diff destaca apenas o conteúdo que realmente mudou, reduzindo o ruído e o tempo de revisão. Essa disciplina é o que separa uma revisão tranquila de uma cheia de falsos positivos.

Diff em revisões de código e merges

No desenvolvimento, o diff é o coração da revisão de código. Antes de aprovar uma mudança, a pessoa revisora lê o diff para entender o impacto: o que foi adicionado, removido e alterado. Diffs pequenos e focados são mais fáceis de revisar do que mudanças enormes, por isso é boa prática dividir alterações grandes em partes menores. Formatar o código antes de commitar também ajuda, porque evita que diferenças de estilo poluam o diff e escondam a mudança real.

Em merges, o diff aparece de novo quando há conflito: duas pessoas mudaram a mesma região e o sistema não sabe qual versão manter. Entender a marcação de adicionado e removido é o que permite resolver o conflito com segurança, escolhendo as linhas certas de cada lado. Mesmo fora do Git, comparar a versão antiga e a nova de um arquivo de configuração antes de aplicar em produção evita surpresas, como uma variável removida sem querer.

Uma dica final é cuidar das quebras de linha invisíveis. Arquivos criados no Windows usam um caractere de retorno diferente dos criados em Linux e Mac, e isso pode fazer um diff acusar que todas as linhas mudaram, mesmo quando o conteúdo é idêntico. Boas ferramentas normalizam essas quebras antes de comparar. Se um diff parecer mostrar diferenças demais sem explicação, desconfie de codificação ou de quebra de linha, e padronize os dois lados antes de concluir que houve mudança real.

Quando usar a ferramenta do ValorFinal

Use o comparador de texto para comparar dois textos, JSON ou trechos de código, com opções de ignorar espaços e maiúsculas e de formatar JSON antes. Para padronizar a entrada, use o formatador de código e o validador de JSON. Conheça as demais ferramentas de tecnologia.

Fontes oficiais

Conclusão

Comparar textos e JSON com um diff economiza tempo e evita erros em revisões. O segredo é normalizar antes (formatar JSON, padronizar quebras de linha e codificação) para o diff destacar só o que mudou de verdade. Use o comparador de texto, padronize a entrada com o formatador de código e conheça as demais ferramentas de tecnologia.

Calculadoras deste guia

Fontes oficiais

Links externos para os documentos oficiais consultados na construção desta página. O conteúdo deles pode mudar sem aviso; em caso de divergência, vale sempre a fonte oficial.

Como validamos os cálculos

Os valores citados neste guia são estimativos e baseados em fontes oficiais (Algoritmo de diff (LCS) / MDN / boas práticas de revisão). Eles podem variar conforme convenção coletiva, situação individual e atualizações da legislação. Entenda nossa metodologia em como validamos os cálculos.

Perguntas frequentes

O que é um diff?
Diff é a comparação entre duas versões de um texto que mostra o que mudou: quais linhas foram adicionadas, removidas ou alteradas. É a base do controle de versão (Git) e das revisões de código, mas também serve para comparar contratos, configurações e qualquer texto. O objetivo é destacar apenas as diferenças, em vez de reler tudo.
Qual a diferença entre comparação de texto e comparação semântica?
A comparação de texto olha os caracteres e as linhas como estão. Já a comparação semântica entende a estrutura: em JSON, por exemplo, dois objetos com as mesmas chaves em ordem diferente são equivalentes, ainda que o texto seja diferente. Para aproximar os dois mundos, formate o JSON antes de comparar, assim diferenças de espaçamento e ordem de formatação somem.
Como comparar JSON corretamente?
Formate os dois lados com a mesma indentação antes de comparar. Isso elimina diferenças falsas causadas por espaçamento. O que sobra são mudanças reais de valores ou de chaves. Lembre que a ordem das chaves em um objeto JSON não muda o significado, mas muda o texto, então a formatação ajuda a reduzir ruído.
O que significam linha adicionada, removida e alterada?
Adicionada é uma linha que existe só na versão nova. Removida existe só na versão antiga. Alterada é quando uma linha foi substituída por outra na mesma posição, ou seja, uma remoção seguida de uma adição. Linhas iguais aparecem sem marcação. Essa classificação facilita ver o impacto de uma mudança.
Quando devo ignorar espaços e maiúsculas na comparação?
Ignore espaços quando a formatação não importa, por exemplo ao comparar textos colados de fontes diferentes. Ignore maiúsculas quando a diferença entre maiúsculas e minúsculas não for relevante. Em código, porém, cuidado: em muitas linguagens a caixa importa, então comparar de forma sensível à caixa pode ser o correto.
Comparar textos online expõe meus dados?
Depende da ferramenta. Em serviços que enviam o conteúdo para um servidor, evite comparar contratos, payloads com dados pessoais ou configurações internas. Prefira ferramentas que rodam no navegador, como o comparador do ValorFinal, em que os dois textos não saem do seu dispositivo.
Por que o diff mostra todas as linhas como alteradas?
Quase sempre é problema de quebra de linha ou codificação. Arquivos criados no Windows usam um caractere de retorno diferente dos criados em Linux e Mac, e isso pode fazer o diff acusar que tudo mudou, mesmo com conteúdo idêntico. A solução é normalizar as quebras de linha e a codificação (UTF-8) dos dois lados antes de comparar.
Qual a diferença entre diff por linha e por palavra?
O diff por linha marca a linha inteira como mudada quando qualquer parte dela difere; é rápido e ideal para código. O diff por palavra (ou por caractere) mostra exatamente o que mudou dentro da linha, útil em textos corridos longos, como contratos, onde uma alteração mínima ficaria escondida em uma linha grande.
Como resolver um conflito de merge usando diff?
Um conflito acontece quando duas pessoas alteram a mesma região do arquivo. O sistema marca as duas versões; entender a marcação de adicionado e removido permite escolher quais linhas manter de cada lado, combinando as mudanças corretamente. Depois de resolver, vale revisar o diff final para confirmar que nada foi perdido.