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 ärNULL
, sedanNULL
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.