I MariaDB, JSON_ARRAY_INSERT()
er en indbygget funktion, der indsætter en værdi i et JSON-dokument og returnerer resultatet.
Syntaks
Syntaksen ser sådan ud:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Hvor json_doc
er JSON-dokumentet, path
er stien til hvor du vil indsætte værdien/værdierne og value
er værdien, der skal indsættes.
Eksempel
Her er et eksempel til at demonstrere.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Resultat:
+----------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |+-------------------------------- ----------------+| [0, 3, 1, 2] |+---------------------------------------------- ----+
I dette tilfælde værdien 3
blev indsat i arrayet på position 1
. Arrays er nulbaserede, så det bliver det andet element i arrayet.
Indsæt flere værdier
Du kan indsætte flere værdier inden for et enkelt kald til JSON_ARRAY_INSERT()
.
Eksempel:
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] |+--------------------------------------------- ------------------+
Evaluering udføres fra venstre mod højre.
Her er, hvad der sker, hvis vi skifter path
/value
argumenter omkring:
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] |+-------------------------------------------- ------------------+
Flere arrays
Du kan indsætte værdier i mere end én matrix inden for samme opkald til JSON_ARRAY_INSERT()
.
Eksempel:
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]} |+---------------------- ----------------------------------+
Indlejrede arrays
Her er et eksempel på indsættelse af en værdi i et indlejret 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
Her er et eksempel med et lidt større JSON-dokument.
Jeg bruger også JSON_DETAILED()
for at forskønne resultatet:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Resultat:
{ "kæledyr":{ "name":"Fluffy", "diæt":[ "Fisk", "Kylling", "Vand" ] }}
Nul-argumenter
Hvis det første argument er NULL
, resultatet er NULL
:
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Resultat:
+--------------------------------------------+| JSON_ARRAY_INSERT(null, '$[1]', 4) |+---------------------------------------- -+| NULL |+--------------------------------------------+
Det samme gælder for path
argument:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Resultat:
+----------------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |+------------------------------ --------------+| NULL |+----------------------------------------------------+Men hvis
value
argumentet erNULL
, derefterNULL
er indsat i arrayet:SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Resultat:
+---------------------------------------------- +| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |+-------------------------------- -------------------+| [0, null, 1, 2] |+---------------------------------------------- -------+Du kan også bruge
JSON_ARRAY_APPEND()
for at tilføje værdier til en matrix.