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ção | O que significa |
|---|---|
| add | Acrescenta um valor onde não havia nenhum, ou insere num array. |
| remove | Apaga o valor daquele lugar. |
| replace | Sobrescreve o valor de um lugar que já existe. |
| move | Move um valor de um lugar para outro. |
| copy | Copia um valor para outro lugar. |
| test | Confere 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.
- Cole o JSON original à esquerda.
- Cole o JSON atualizado à direita.
- 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