SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite JSON_PATCH()


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}