I MySQL er JSON_ARRAY_INSERT()
funktion bruges til at indsætte en ny værdi i et array.
Du angiver JSON-dokumentet som det første argument, efterfulgt af stien, der skal indsættes i, efterfulgt af værdien, der skal indsættes.
Syntaks
Syntaksen ser sådan ud:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Hvor:
json_doc
er JSON-dokumentet.sti
er stien til det element, som den nye værdi skal indsættes for.val
er den nye værdi, der vil blive indsat.
Sti-værdi-parrene evalueres fra venstre mod højre. Dokumentet fremstillet ved at evaluere et par bliver den nye værdi, som det næste par evalueres i forhold til.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Resultat:
+--------------+ | Result | +--------------+ | [1, 4, 2, 3] | +--------------+
Så det 3. argument indsættes i arrayet ved den angivne sti. I dette tilfælde bruger jeg $[1]
for stien, som refererer til det andet element (JSON-arrays bruger nul-baseret nummerering – nummerering starter ved 0
).
Eksempel 2 – Nested Array
Her er et eksempel på indsættelse af en værdi i et array, der er indlejret i et andet array.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';
Resultat:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 5, 4]] | +-------------------+
Så her bruger jeg $[2][1]
som stien. [2]
refererer til det 3. element i det ydre array.
Eksempel 3 – Et større JSON-dokument
Dette eksempel bruger et (lidt) større JSON-dokument. Dette viser, hvordan stien ændres afhængigt af, hvor arrayet er i dokumentet.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';
Resultat:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Base Jumping", "Sleeping"]}} | +----------------------------------------------------------------------------------+