V MySQL je to JSON_ARRAY_INSERT()
funkce se používá k vložení nové hodnoty do pole.
Jako první argument zadáte dokument JSON, za ním následuje cesta, do které se má vložit, a za ním hodnota, kterou chcete vložit.
Syntaxe
Syntaxe vypadá takto:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Kde:
json_doc
je dokument JSON.path
je cesta prvku, pro který se má vložit nová hodnota.val
je nová hodnota, která bude vložena.
Páry cesta-hodnota se vyhodnocují zleva doprava. Dokument vytvořený vyhodnocením jednoho páru se stane novou hodnotou, podle které je vyhodnocen další pár.
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT JSON_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Výsledek:
+--------------+ | Result | +--------------+ | [1, 4, 2, 3] | +--------------+
Takže 3. argument je vložen do pole na zadané cestě. V tomto případě používám $[1]
pro cestu, která odkazuje na druhý prvek (pole JSON používají číslování založené na nule – číslování začíná 0
).
Příklad 2 – vnořené pole
Zde je příklad vložení hodnoty do pole, které je vnořeno do jiného pole.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';
Výsledek:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 5, 4]] | +-------------------+
Zde tedy používám $[2][1]
jako cesta. [2]
odkazuje na 3. prvek vnějšího pole. [1]
odkazuje na 2. prvek vnořeného pole.
Příklad 3 – Větší dokument JSON
Tento příklad používá (trochu) větší dokument JSON. To ukazuje, jak se cesta mění v závislosti na tom, kde se pole v dokumentu nachází.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';
Výsledek:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Base Jumping", "Sleeping"]}} | +----------------------------------------------------------------------------------+