No SQLite, o
json_patch() A função pode ser usada para adicionar, modificar ou excluir elementos de um objeto JSON. Para fazer isso, ele executa o algoritmo MergePatch RFC-7396 para aplicar um determinado patch à entrada JSON fornecida.
Passamos o JSON original como o primeiro argumento quando chamamos a função, seguido do patch. A função então aplica esse patch ao JSON no primeiro argumento.
Sintaxe
A sintaxe fica assim:
json_patch(T,P) Onde
T representa o JSON original e P é o remendo. A função aplica o patch P contra T . O conteúdo do patch fornecido
P é comparado com o conteúdo atual do documento JSON de destino T . Se P contém membros que não aparecem em T , esses membros são adicionados. Se T contém o membro, o valor é substituído. Valores nulos em
P recebem um significado especial para indicar a remoção de valores existentes em T . Exemplos
Aqui estão alguns exemplos para demonstrar.
Inserir
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }'); Resultado:
{"name":"Fluffy","age":10} Tentar inserir um novo membro com um valor nulo não funciona:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }'); Resultado:
{"name":"Fluffy"} Valores nulos são realmente usados para remover membros do JSON (como visto em um exemplo posterior).
Atualizar
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }'); Resultado:
{"name":"Baldy"} Se houver vários pares de chave/valor, mas queremos atualizar apenas um, precisamos apenas especificar esse em nosso segundo argumento:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }'); Resultado:
{"name":"Baldy","age":10} O mesmo conceito se aplica ao atualizar vários pares de chave/valor – precisamos apenas especificar esses:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
); Resultado:
{"name":"Baldy","type":"Cat","age":11} Atualizar e inserir
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }'); Resultado:
{"name":"Baldy","age":10} Excluir/Remover
Valores nulos no patch de mesclagem recebem um significado especial para indicar a remoção de valores existentes no destino:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }'); Resultado:
{"name":"Fluffy"} Matrizes
O
json_patch() função não pode anexar elementos a uma matriz, nem modificar elementos individuais de uma matriz. Ele só pode inserir, substituir ou excluir toda a matriz como uma única unidade. Então, aqui está um exemplo de anexar um elemento a um array:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]'); Resultado:
[1,2,3,4]
Eu tive que substituir a matriz original por uma totalmente nova. Então, tecnicamente, eu não acrescentei nada – simplesmente substituí todo o array por outro.
O mesmo conceito se aplica se a matriz estiver dentro de um objeto:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }'); Resultado:
{"scores":[1,2,3,4]} Se você precisa trabalhar com arrays, tente funções como
json_set() , json_insert() , json_remove() e json_replace() em vez de. Substituir um objeto por um array
Podemos substituir objetos por um array simplesmente fornecendo um array como patch:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]'); Resultado:
["Fluffy",10]
Substituir uma matriz por um objeto
E funciona ao contrário também:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }'); Resultado:
{"name":"Fluffy","age":10}