In SQLite der json_patch()
Funktion kann verwendet werden, um Elemente eines JSON-Objekts hinzuzufügen, zu ändern oder zu löschen.
Dazu wird der RFC-7396 MergePatch-Algorithmus ausgeführt, um einen bestimmten Patch auf die angegebene JSON-Eingabe anzuwenden.
Wir übergeben das ursprüngliche JSON als erstes Argument, wenn wir die Funktion aufrufen, gefolgt vom Patch. Die Funktion wendet diesen Patch dann im ersten Argument auf JSON an.
Syntax
Die Syntax lautet wie folgt:
json_patch(T,P)
Wobei T
steht für das ursprüngliche JSON und P
ist der Fleck. Die Funktion wendet Patch P
an gegen T
.
Der Inhalt des bereitgestellten Patches P
wird mit dem aktuellen Inhalt des Ziel-JSON-Dokuments T
verglichen . Wenn P
enthält Elemente, die nicht in T
erscheinen , werden diese Mitglieder hinzugefügt. Wenn T
das Mitglied enthält, wird der Wert ersetzt.
Nullwerte in P
erhalten eine besondere Bedeutung, um auf das Entfernen vorhandener Werte in T
hinzuweisen .
Beispiele
Hier sind einige Beispiele zur Veranschaulichung.
Einfügen
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }');
Ergebnis:
{"name":"Fluffy","age":10}
Der Versuch, ein neues Mitglied mit einem Nullwert einzufügen, funktioniert nicht:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');
Ergebnis:
{"name":"Fluffy"}
Nullwerte werden tatsächlich zum Entfernen von Mitgliedern aus JSON verwendet (wie in einem späteren Beispiel zu sehen).
Aktualisieren
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');
Ergebnis:
{"name":"Baldy"}
Wenn es mehrere Schlüssel/Wert-Paare gibt, wir aber nur eines aktualisieren möchten, müssen wir nur dieses in unserem zweiten Argument angeben:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }');
Ergebnis:
{"name":"Baldy","age":10}
Dasselbe Konzept gilt für die Aktualisierung mehrerer Schlüssel/Wert-Paare – wir müssen nur diese angeben:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
);
Ergebnis:
{"name":"Baldy","type":"Cat","age":11}
Aktualisieren und einfügen
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }');
Ergebnis:
{"name":"Baldy","age":10}
Löschen/Entfernen
Nullwerten im Merge-Patch wird eine besondere Bedeutung gegeben, um das Entfernen vorhandener Werte im Ziel anzuzeigen:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }');
Ergebnis:
{"name":"Fluffy"}
Arrays
Der json_patch()
Die Funktion kann keine Elemente an ein Array anhängen oder einzelne Elemente eines Arrays ändern. Es kann nur das gesamte Array als einzelne Einheit einfügen, ersetzen oder löschen.
Hier ist also ein Beispiel für das Anhängen eines Elements an ein Array:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');
Ergebnis:
[1,2,3,4]
Ich musste das ursprüngliche Array durch ein ganz neues ersetzen. Technisch gesehen habe ich also nichts angehängt – ich habe einfach das gesamte Array durch ein anderes ersetzt.
Dasselbe Konzept gilt, wenn sich das Array innerhalb eines Objekts befindet:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');
Ergebnis:
{"scores":[1,2,3,4]}
Wenn Sie mit Arrays arbeiten müssen, probieren Sie Funktionen wie json_set()
aus , json_insert()
, json_remove()
und json_replace()
stattdessen.
Objekt durch ein Array ersetzen
Wir können Objekte durch ein Array ersetzen, indem wir einfach ein Array als Patch angeben:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');
Ergebnis:
["Fluffy",10]
Ein Array durch ein Objekt ersetzen
Und umgekehrt funktioniert es auch:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');
Ergebnis:
{"name":"Fluffy","age":10}