ForHosting KIT · Dados e planilhas

Compare objetos JSON e encontre todas as alterações

Coloque lado a lado a versão antiga e a nova de um registro de dados e receba só as diferenças reais: no exemplo, 2 inclusões, 1 remoção e 2 alterações, 5 no total, sem contar espaços nem a ordem das chaves. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve

Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.

Esta ferramenta compara valores já interpretados. Arrays mantêm a ordem e são comparados por inteiro. A operação é determinística, não acessa a rede e rejeita arrays, valores primitivos ou null como entradas no nível superior.

Comparar os dados, não o texto

Uma comparação de texto faz uma atualização pequena parecer enorme, porque o recuo, a ordem das chaves e outros detalhes de formatação desviam a atenção dos dados. Esta ferramenta lê as duas versões como dados, então só contam as diferenças reais: se o conteúdo é o mesmo com outros espaços ou outra ordem, as três listas saem vazias. Quando uma seção existe nos dois lados, a comparação entra nela e aponta o dado mais profundo que mudou, como /profile/active no exemplo. As listas são comparadas por inteiro: incluir editor em roles gera uma única alteração, com a lista anterior e a nova completas.

Quando usar e o que observar

Antes de publicar uma configuração nova, uma revisão pode barrar a mudança se entre os itens removidos houver ajustes protegidos; uma verificação automática pode confirmar que só os caminhos aprovados mudaram, e uma auditoria pode guardar a diferença compacta em vez de dois documentos grandes. Olhe sempre a categoria, não só o caminho: remover um valor e incluir outro em outro lugar não é o mesmo que alterar um valor existente. Os totais resumem o resultado, e as duas versões precisam ser registros com nomes no primeiro nível, não uma lista nem um valor solto.

Como ler a lista de diferenças

O resultado organiza as diferenças em coleções de itens adicionados, removidos e alterados. Um item adicionado só existe no objeto atualizado; um removido só aparece no original; e um alterado traz os valores anterior e posterior. Por exemplo, /profile/name identifica name dentro de profile.

O formato representa uma barra na chave como ~1 e um til como ~0, evitando ambiguidades com níveis aninhados. As propriedades são percorridas em ordem, gerando respostas estáveis. O bloco counts resume as categorias e o total.

Se as três listas estiverem vazias, os objetos são estruturalmente iguais, mesmo que o texto original tivesse outro recuo ou outra ordem de chaves.

Tratamento de objetos aninhados e arrays

Quando a mesma chave contém um objeto nos dois lados, a comparação desce até a propriedade específica que diverge. Se profile existir em ambas as entradas e apenas profile.active mudar, o caminho será /profile/active. Se uma chave inteira existir somente de um lado, ela será registrada uma vez com o valor completo, sem criar um evento para cada descendente.

Primitivos e null são comparados diretamente. Uma troca de tipo também é informada como alteração.

Revisar versões de configuração

Compare a configuração implantada com a candidata e mostre apenas mudanças estruturais, sem ruído de espaços ou ordem.

Proteger configurações aprovadas

Verifique caminhos no CI e interrompa a implantação se uma opção protegida for removida ou alterada.

Qual formato de caminho aparece no resultado?

Barras em chaves viram ~1 e tils viram ~0.

A ordem das chaves conta como alteração?

Não. Objetos são comparados pelas chaves e valores; outra ordem de serialização não gera diferença.

Como os arrays são comparados?

Eles são valores ordenados comparados por inteiro. Editar, inserir, remover ou reorganizar um elemento marca o array como alterado.

Uma mudança dentro de uma seção aparece separada?

Sim. Quando as duas versões têm a mesma seção, a comparação entra nela e aponta o dado mais profundo que mudou. No exemplo só active mudou dentro de profile, então o resultado indica /profile/active e não o perfil inteiro.

O que acontece quando uma seção inteira é nova?

Ela é registrada uma única vez, com todo o conteúdo, em vez de uma entrada para cada dado interno. Assim, uma seção de configuração recém-incluída é lida como um só evento, e não como uma lista longa de inclusões soltas.

Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.

POSThttps://api.kit.forhosting.com/data/diff-json-objects

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/data/diff-json-objects \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"before":{"name":"Ada","profile":{"active":true,"score":8},"roles":["reader"]},"after":{"name":"Ada","profile":{"active":false,"score":8,"city":"London"},"roles":["reader","editor"]}}'
{
  "before": {
    "name": "Ada",
    "profile": {
      "active": true,
      "score": 8
    },
    "roles": [
      "reader"
    ]
  },
  "after": {
    "name": "Ada",
    "profile": {
      "active": false,
      "score": 8,
      "city": "London"
    },
    "roles": [
      "reader",
      "editor"
    ]
  }
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.diff_json_objects",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

max_mb25
HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Uma comparação textual pode transformar uma pequena atualização JSON em muito ruído, pois recuo, ordem das chaves e formatação escondem as mudanças reais. Ela separa chaves adicionadas, removidas e alteradas, percorre objetos aninhados compartilhados e fornece um caminho JSON Pointer inequívoco.

Como interpretar uma diferença estrutural de JSON

Cada item usa um caminho JSON Pointer iniciado por barra.

Tratamento de objetos aninhados e arrays

Arrays são valores JSON ordenados e completos: inserir, excluir, reorganizar ou editar um elemento marca a propriedade do array como alterada. Somente as entradas superiores seguem uma regra mais rígida: before e after precisam ser objetos JSON não nulos.

Uso da diferença em revisões e automações

Você pode impedir uma implantação quando uma configuração protegida for removida, validar somente caminhos aprovados ou guardar uma diferença compacta para auditoria. Para arrays, você recebe os valores completos e pode aplicar regras específicas depois. Uma entrada superior inválida gera um erro claro, nunca uma diferença vazia enganosa. Envie o objeto original em before e a versão proposta em after. A ferramenta do navegador funciona localmente, enquanto uma chamada de API custa US$ 0,002 e entrega a mesma estrutura determinística. Como formatação e ordem das chaves não criam falsos positivos, o recurso atende configurações, webhooks, flags, permissões e respostas normalizadas. Interprete os caminhos como JSON Pointer e considere também a categoria.

Auditar a evolução de webhooks

Registre quais campos aninhados surgiram, desapareceram ou mudaram entre dois exemplos normalizados.

Posso comparar dois arrays no nível superior?

Não. before e after devem ser objetos JSON não nulos; arrays ou primitivos superiores geram erro de entrada.

Quanto custa uma solicitação de API?

A ferramenta web roda localmente sem custo. Cada chamada de API usa o preço-base publicado de US$ 0,002.

Ver a documentação completa do KIT →