search

Found

info Visão geral

Cole um JSON alvo e um JSON patch para aplicar as regras RFC 7396 (null apaga, escalar substitui, objeto faz merge) e ver cada etapa do processo.

📘 Como usar

  1. Cole o JSON alvo no campo da esquerda
  2. Cole o JSON patch (RFC 7396) no campo da direita
  3. Confira o resultado da fusão e o trace de operações

Avaliador JSON Merge Patch (RFC 7396)

Documento JSON ao qual o patch é aplicado.

null remove, escalar substitui, objeto aplica recursivamente.

Status
 
Copiado

    ※ Algoritmo: se o patch for objeto, recursão em cada membro; caso contrário, substitui o alvo por inteiro (RFC 7396 §2).

    ※ Arrays são opacos: qualquer array no patch substitui integralmente o array do alvo.

    Article

    Avaliador JSON Merge Patch (RFC 7396) | Resultado da fusão e trace passo a passo

    Cole um JSON alvo e um JSON patch para aplicar as regras de fusão da RFC 7396, ver o documento resultante e ler um trace ordenado de cada operação de definir, remover e substituir a raiz.

    💡 Sobre esta ferramenta

    Ao projetar ou revisar um endpoint HTTP PATCH, normalmente você quer saber o que um corpo de patch realmente faz com o recurso armazenado antes de disparar uma requisição de verdade. A RFC 7396 (JSON Merge Patch) parece simples — você envia um objeto parcial e o servidor faz o merge — mas os casos de borda pegam: null remove um membro, chaves ausentes ficam intactas, objetos aninhados são fundidos de forma recursiva e arrays são substituídos por inteiro em vez de fundidos.

    Esta ferramenta tira a dúvida. Cole o alvo e o patch e veja o JSON resultante junto com uma lista numerada do que mudou: definir /title = "Hello World", remover /author/email, e assim por diante. Esse trace é o diferencial: em vez de comparar dois blocos no olho, você lê as operações exatas que a fusão produziu, o que facilita confirmar que a especificação de um PATCH se comporta como esperado e flagrar cedo uma substituição acidental.

    🧐 Perguntas frequentes

    Q. Qual a diferença em relação ao JSON Patch (RFC 6902)? A RFC 6902 é um array de operações explícitas — add, remove, replace, move, copy, test — e consegue mirar um índice específico de um array. A RFC 7396 é declarativa: você envia um objeto parcial descrevendo o estado desejado. É mais compacta, mas não permite editar arrays parcialmente nem definir um valor como null. Esta ferramenta implementa apenas a RFC 7396.

    Q. Posso alterar um único elemento dentro de um array? Não. Sob a RFC 7396, arrays são valores opacos, então qualquer array no patch substitui o array do alvo por completo. Se você precisa de mudanças no nível do elemento, esse é o sinal para recorrer à RFC 6902.

    Q. O que acontece se eu colocar null em uma chave que o alvo não tem? Nada. Se a chave não existe no alvo, o null é uma operação nula: não há remoção e nada entra no trace.

    Q. E se o patch for um escalar ou um array em vez de um objeto? O patch inteiro substitui o alvo (RFC 7396 §2) e o trace mostra uma única entrada de "substituir raiz". Um campo vazio é tratado como null.

    Q. A ordem das chaves é preservada? A saída é formatada, então chaves recém-adicionadas podem aparecer mais ao fim. A RFC 7396 não fixa a ordem das chaves, então compare os resultados por equivalência semântica, e não byte a byte.

    📚 Por que merge patch é tão usado em APIs

    A RFC 7396 ganhou espaço justamente por ser legível para humanos: o corpo do patch se parece com a própria parte do recurso que você quer mudar, sem a verbosidade de um array de operações. Em frameworks de API como os do ecossistema Spring, é comum a escolha entre merge patch e RFC 6902 ser feita pela complexidade da atualização — merge patch para ajustes diretos de campos, RFC 6902 quando se precisa de controle fino sobre arrays ou de verificação com test. O efeito colateral mais citado é a impossibilidade de definir um campo como null pela merge patch, já que null sempre significa remoção. Ver a fusão operação por operação ajuda a estudar esse comportamento e a confirmar onde a recursão para antes de mandar a requisição.