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

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.

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: basico
ativo: true

Versão B:

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

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

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.

Calculadoras deste guia

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.