Når du bruger JSON-dokumenter med MySQL, kan du bruge JSON_ARRAY_APPEND()
funktion til at tilføje nye værdier til en matrix.
Måden det fungerer på er, at du angiver JSON-dokumentet som det første argument, og derefter følger det op med stien, der skal tilføjes, efterfulgt af værdien, der skal tilføjes.
I MySQL 5.7 blev denne funktion kaldt JSON_APPEND()
men det navn er ikke længere understøttet.
Syntaks
Syntaksen ser sådan ud:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
Hvor:
json_doc
er JSON-dokumentet.path
er stien til det element, som den nye værdi skal føjes til.val
er den nye værdi, der vil blive tilføjet.
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_APPEND('[1, 2, 3]', '$', 4) AS 'Result';
Resultat:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Så det 3. argument er tilføjet til arrayet. I dette tilfælde bruger jeg $
for stien. Dette er et synonym for JSON-dokumentet, så værdien tilføjes til arrayet på øverste niveau (som i dette tilfælde tilfældigvis er det eneste array).
Eksempel 2 – Nested Array
Her er et eksempel på tilføjelse af en værdi til en matrix, der er indlejret i en anden matrix.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';
Resultat:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 4, 5]] | +-------------------+
Så her bruger jeg $[2]
som stien. Dette specificerer arrayet ved det tredje element (arrays bruger nul-baseret nummerering, så optællingen starter ved nul).
Hvis der ikke allerede var et array ved det element, oprettes et nyt array.
Sådan:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';
Resultat:
+----------------+ | Result | +----------------+ | [1, 2, [3, 4]] | +----------------+
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_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';
Resultat:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Og ligesom i det foregående eksempel kan vi også oprette en ny, indlejret matrix, hvis det kræves:
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';
Resultat:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} | +--------------------------------------------------------------------------------+