I MariaDB, JSON_SET() är en inbyggd funktion som uppdaterar eller infogar data i ett JSON-dokument och returnerar resultatet.
JSON_SET() kan uppdatera och infoga data, medan JSON_INSERT() kan bara infoga data och JSON_REPLACE() kan bara uppdatera data.
Syntax
Syntaxen ser ut så här:
JSON_SET(json_doc, path, val[, path, val] ...) Var:
json_docär JSON-dokumentet.pathär sökvägen till elementet för vilket data ska infogas eller uppdateras värdet på.valär det nya värdet.
Exempel
Här är ett exempel att visa.
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT JSON_SET(@json, '$.type', 'Dog'); Resultat:
+----------------------------------+
| JSON_SET(@json, '$.type', 'Dog') |
+----------------------------------+
| {"name": "Wag", "type": "Dog"} |
+----------------------------------+
I det här fallet uppdaterade jag värdet för type medlem Cat till Dog .
Arrayelement
För att uppdatera eller infoga ett matriselement, ange elementets index:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[1]', 7); Resultat:
+--------------------------------------+
| JSON_SET(@json, '$.scores[1]', 7) |
+--------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]} |
+--------------------------------------+
I det här fallet uppdaterades det andra matriselementet med det nya värdet. Arrayer är nollbaserade, och så $.scores[1] hänvisar till det andra elementet i arrayen.
Infoga data
De tidigare exemplen uppdaterade befintliga data. Här är ett exempel på att infoga ny data:
SET @json = '
{
"name" : "Wag",
"type" : "Dog"
}
';
SELECT JSON_SET(@json, '$.weight', 10); Resultat:
+----------------------------------------------+
| JSON_SET(@json, '$.weight', 10) |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog", "weight": 10} |
+----------------------------------------------+
Här infogade vi ett nytt nyckel/värdepar ("weight": 10 ).
Nedan är ett exempel på hur du lägger till ett nytt element i en array:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[3]', 7); Resultat:
+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7) |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+
Det här arrayexemplet kan också göras med JSON_ARRAY_INSERT() eller JSON_ARRAY_APPEND() .
Flera vägar
Syntaxen gör det möjligt att ställa in/uppdatera värden på flera vägar med ett enda anrop till JSON_SET() .
Exempel:
SET @json = '
{
"name" : "Scratch",
"type" : "Rat"
}
';
SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10); Resultat:
+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+ I nästa exempel infogar vi ett nytt värde i en array och uppdaterar ett annat:
SET @json = '{ "scores" : [ 0, 1, 2 ] }';
SELECT
JSON_SET(
@json,
'$.scores[1]', "a",
'$.scores[3]', "b"
) AS Result; Resultat:
+------------------------------+
| Result |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+ Nollargument
Om json_doc eller någon av path argument är null , resultatet är NULL . Men om value argumentet är null , då ersätts värdet till null .
SELECT
JSON_SET(null, '$.a', 1) AS a,
JSON_SET('{"a":1}', null, 1) AS b,
JSON_SET('{"a":1}', '$.a', null) AS c; Resultat:
+------+------+-------------+
| a | b | c |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+
I följande exempel saknas ett av sökvägsargumenten i varje anrop till JSON_SET() . I båda fallen är resultatet NULL :
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT
JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b; Resultat:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Felaktig parameterräkning
Anropar JSON_SET() utan argument resulterar i ett fel:
SELECT JSON_SET(); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'
Det är samma sak när inte tillräckligt många argument skickas:
SELECT JSON_SET('{"a":1}'); Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'