I MariaDB, JSON_ARRAY_INSERT() är en inbyggd funktion som infogar ett värde i ett JSON-dokument och returnerar resultatet.
Syntax
Syntaxen ser ut så här:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Där json_doc är JSON-dokumentet, path är sökvägen dit du vill infoga värdet/värdena och value är värdet som ska infogas.
Exempel
Här är ett exempel att visa.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3); Resultat:
+---------------------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |+-------------------------------- ----------------+| [0, 3, 1, 2] |+---------------------------------------------- ----+
I det här fallet är värdet 3 infogades i arrayen vid position 1 . Matriser är nollbaserade, så det blir det andra elementet i matrisen.
Infoga flera värden
Du kan infoga flera värden inom ett enda anrop till JSON_ARRAY_INSERT() .
Exempel:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5); Resultat:
+------------------------------------------------------ --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |+------------------------ ------------------------------------+| [4, 0, 5, 1, 2] |+-------------------------------------------- ------------------+ Utvärdering utförs från vänster till höger.
Här är vad som händer om vi byter path /value argument kring:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4); Resultat:
+------------------------------------------------------ --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |+------------------------ ------------------------------------+| [4, 0, 1, 5, 2] |+--------------------------------------------- ------------------+ Flera matriser
Du kan infoga värden i mer än en array inom samma anrop till JSON_ARRAY_INSERT() .
Exempel:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5); Resultat:
+------------------------------------------------------ ----------+| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |+--------------------------- ----------------------------------+| {"a":[0, 4, 1], "b":[2, 3, 5]} |+---------------------- ----------------------------------+ Inkapslade arrayer
Här är ett exempel på att infoga ett värde i en kapslad array:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4); Resultat:
+----------------------------------------------------+| JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) |+------------------------------ -------------+| [0, 1, [2, 4, 3]] |+---------------------------------------- ----------+
Större JSON-dokument
Här är ett exempel med ett lite större JSON-dokument.
Jag använder också JSON_DETAILED() för att försköna resultatet:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
); Resultat:
{ "pet":{ "name":"Fluffig", "diet":[ "Fisk", "Kyckling", "Vatten" ] }} Nollargument
Om det första argumentet är NULL , resultatet är NULL :
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4); Resultat:
+--------------------------------------------+| JSON_ARRAY_INSERT(null, '$[1]', 4) |+---------------------------------------- -+| NULL |+--------------------------------------------+
Detsamma gäller för path argument:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4); Resultat:
+----------------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |+---------------------------------------- --------------+| NULL |+----------------------------------------------------+
Men om value argumentet är NULL , sedan NULL infogas i arrayen:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Resultat:
+------------------------------------------------------ +| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |+-------------------------------- ------------------+| [0, null, 1, 2] |+---------------------------------------------- -------+
Du kan också använda JSON_ARRAY_APPEND() för att lägga till värden till en array.