V MySQL je to JSON_INSERT()
funkce vloží hodnotu do dokumentu JSON a vrátí výsledek.
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, cesta, hodnota[, cesta, hodnota] ...)
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_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Result';
Výsledek:
+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+Takže 3. argument je vložen do pole na zadané cestě. V tomto případě používám
$.c
pro cestu a3
pro hodnotu, která se má vložit. Výsledkem je pár klíč/hodnota"c": 3
.Zde je další příklad:
SELECT JSON_INSERT('{"Jméno":"Homer", "Gender":"Muž"}', '$.Věk', 39) AS 'Výsledek';Výsledek:
+---------------------------------------------- --+| Výsledek |+----------------------------------------------- -+| {"Věk":39, "Jméno":"Homer", "Pohlaví":"Muž"} |+------------------------- -----------------------+Příklad 2 – Pokus o přepsání existující cesty
Pár cesta-hodnota pro existující cestu v dokumentu je ignorován a nepřepisuje stávající hodnotu dokumentu.
Pokud tedy upravíme předchozí příklad, abychom vložili hodnotu do
Name
(který již existuje), neproběhne žádné vložení:SELECT JSON_INSERT('{"Jméno":"Homer", "Gender":"Muž"}', '$.Name', "Bart") JAKO 'Výsledek';Výsledek:
+-------------------------------------+| Výsledek |+-------------------------------------+| {"Jméno":"Homer", "Gender":"Muž"} |+------------------------------- ------+Příklad 3 – Pole
Hodnoty můžete do pole vložit pomocí cesty za konec existujícího pole. Příklad:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Výsledek';Výsledek:
+---------------+| Výsledek |+---------------+| [1, 2, 3, 4] |+--------------+Pokud však použijete cestu, která již v poli existuje, pole zůstane nezměněno:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Výsledek';Výsledek:
+------------+| Výsledek |+------------+| [1, 2, 3] |+------------+Pokud existující hodnota není pole, je automaticky zabaleno jako pole a poté rozšířeno o novou hodnotu. Příklad:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[2]', 3) AS 'Result';Výsledek:
+-----------------------+| Výsledek |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+Ale znovu, pokud se pokusíte vložit hodnotu do cesty, která již existuje, dokument JSON zůstane nezměněn:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+Příklad 4 – Větší dokument JSON
Zde je příklad s (trochu) větším dokumentem JSON.
SET @data ='{ "Osoba":{ "Jméno":"Homer", "Hobby":["Jídlo", "Spánek"] } }';SELECT JSON_INSERT(@data, '$.Person. Hobbies[2]', "Base Jumping") JAKO 'Výsledek';Výsledek:
+---------------------------------------------- ------------------------------------+| Výsledek |+----------------------------------------------- -----------------------------------+| {"Osoba":{"Jméno":"Homer", "Hobby":["Jídlo", "Spánek", "Base Jumping"]}} |+--------------- -------------------------------------------------- ------------------+Viz také
JSON_ARRAY_INSERT()
aJSON_ARRAY_APPEND()
pokud potřebujete vložit nebo připojit data do pole JSON.