In SQLite, de json_patch()
functie kan worden gebruikt om elementen van een JSON-object toe te voegen, te wijzigen of te verwijderen.
Om dit te doen, voert het het RFC-7396 MergePatch-algoritme uit om een bepaalde patch toe te passen op de gegeven JSON-invoer.
We geven de originele JSON door als het eerste argument wanneer we de functie aanroepen, gevolgd door de patch. De functie past vervolgens die patch toe op JSON in het eerste argument.
Syntaxis
De syntaxis gaat als volgt:
json_patch(T,P)
Waar T
staat voor de originele JSON, en P
is de pleister. De functie past patch P
toe tegen T
.
De inhoud van de geleverde patch P
wordt vergeleken met de huidige inhoud van het doel-JSON-document T
. Als P
bevat leden die niet voorkomen in T
, worden die leden toegevoegd. Als T
het lid wel bevat, wordt de waarde vervangen.
Null-waarden in P
krijgen een speciale betekenis om de verwijdering van bestaande waarden in T
. aan te geven .
Voorbeelden
Hier zijn enkele voorbeelden om te demonstreren.
Invoegen
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }');
Resultaat:
{"name":"Fluffy","age":10}
Een nieuw lid met een null-waarde proberen in te voegen werkt niet:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');
Resultaat:
{"name":"Fluffy"}
Null-waarden worden feitelijk gebruikt voor het verwijderen van leden uit de JSON (zoals te zien is in een later voorbeeld).
Bijwerken
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');
Resultaat:
{"name":"Baldy"}
Als er meerdere sleutel/waarde-paren zijn, maar we willen er slechts één bijwerken, hoeven we alleen die in ons tweede argument op te geven:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }');
Resultaat:
{"name":"Baldy","age":10}
Hetzelfde concept is van toepassing bij het bijwerken van meerdere sleutel/waarde-paren – we hoeven alleen die te specificeren:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
);
Resultaat:
{"name":"Baldy","type":"Cat","age":11}
Bijwerken en invoegen
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }');
Resultaat:
{"name":"Baldy","age":10}
Verwijderen/Verwijderen
Null-waarden in de samenvoegpatch krijgen een speciale betekenis om de verwijdering van bestaande waarden in het doel aan te geven:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }');
Resultaat:
{"name":"Fluffy"}
Arrays
De json_patch()
functie kan geen elementen aan een array toevoegen, noch individuele elementen van een array wijzigen. Het kan alleen de hele array invoegen, vervangen of verwijderen als een enkele eenheid.
Dus, hier is een voorbeeld van het toevoegen van een element aan een array:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');
Resultaat:
[1,2,3,4]
Ik moest de originele array vervangen door een geheel nieuwe. Dus technisch gezien heb ik niets toegevoegd - ik heb gewoon de hele array vervangen door een andere.
Hetzelfde concept is van toepassing als de array zich binnen een object bevindt:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');
Resultaat:
{"scores":[1,2,3,4]}
Als je met arrays moet werken, probeer dan functies zoals json_set()
, json_insert()
, json_remove()
en json_replace()
in plaats daarvan.
Vervang een object door een array
We kunnen objecten vervangen door een array door simpelweg een array als patch op te geven:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');
Resultaat:
["Fluffy",10]
Vervang een array door een object
En andersom werkt het ook:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');
Resultaat:
{"name":"Fluffy","age":10}