Gerador de JSON Patch

Compare dois documentos JSON e obtenha o patch do RFC 6902 que transforma o primeiro no segundo. Tudo roda no seu navegador.

O que esta ferramenta faz


Compara dois documentos JSON e escreve a lista de operações que transforma o primeiro no segundo, no formato definido pelo RFC 6902. Em vez de enviar um documento inteiro para dizer que um campo mudou, envia-se a própria alteração.

Quando usar


Use para montar o corpo de um pedido PATCH, para registar o que mudou entre duas versões de um ficheiro de configuração ou para guardar um histórico de auditoria muito menor do que manter todas as cópias inteiras. Também é um jeito rápido de descobrir o que de facto difere entre dois documentos que parecem iguais.

As operações que ele gera


OperaçãoO que significa
addAcrescenta um valor onde não havia nenhum, ou insere num array.
removeApaga o valor daquele lugar.
replaceSobrescreve o valor de um lugar que já existe.
moveMove um valor de um lugar para outro.
copyCopia um valor para outro lugar.
testConfere um valor e aborta o patch inteiro se ele não bater.

Esta ferramenta escreve apenas add, remove e replace. Essas três dão conta de qualquer mudança, e um patch que se lê linha a linha vale mais que um mais curto que custa a perceber. As outras três fazem parte do RFC 6902 e qualquer servidor em conformidade as aceita.

Como os caminhos funcionam


Cada caminho é um JSON Pointer (RFC 6901): uma rota separada por barras a partir da raiz do documento, em que “/address/zipCode” quer dizer o campo zipCode dentro de address. Posições de array são números, então “/skills/0” é o primeiro item, e um traço quer dizer o fim do array: “/skills/-” acrescenta ao final. Como a barra é o separador, uma chave que contenha uma é escrita como ~1, e um til literal como ~0.

Observações sobre o resultado


A comparação é literal: ela confere valor por valor, posição por posição, então inserir um item no começo de um array gera um replace em todos os itens seguintes, e não uma única inserção. Para arrays de objetos com identificadores estáveis, um patch gerado a partir dos identificadores será sempre menor que um gerado a partir das posições.

Como gerar um JSON Patch


Cole dois documentos JSON e gere o patch.

  1. Cole o JSON original à esquerda.
  2. Cole o JSON atualizado à direita.
  3. Clique em Gerar e copie o patch.

Perguntas frequentes


Esta ferramenta envia meus dados para algum lugar?
Não. Os dois documentos ficam no seu navegador e o patch é gerado na sua própria máquina.

O resultado está em conformidade com o RFC 6902?
Está. Cada operação é um objeto com op, path e — para add e replace — value, e os caminhos são JSON Pointers como o RFC 6901 define.

Ele gera operações move e copy?
Não. Ele escreve add, remove e replace, que bastam para qualquer mudança e são bem mais fáceis de ler. Um move é simplesmente um remove seguido de um add.

Como aplico o patch?
Envie para uma API que aceite application/json-patch+json, ou use uma biblioteca: jsonpatch em Python, json-patch em JavaScript, JsonPatchDocument em .NET, json-patch em Java, e assim por diante.

Qual a diferença para o JSON Merge Patch?
O JSON Merge Patch (RFC 7386) se parece com o próprio documento, e null significa “apague”. Isso o torna fácil de ler, mas incapaz de guardar um null de verdade ou de alterar apenas um item de um array. O JSON Patch é mais verboso e consegue expressar qualquer coisa.

Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST