V MySQL je to JSON_SET()
funkce vloží nebo aktualizuje hodnoty v 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. Pokud potřebujete aktualizovat více hodnot, můžete zadat více párů cesta/hodnota.
Syntaxe
Syntaxe vypadá takto:
JSON_SET(json_doc, cesta, hodnota[, cesta, hodnota] ...)
Kde:
json_doc
je dokument JSON.path
je cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.val
je nová hodnota.
Páry cesta-hodnota se vyhodnocují zleva doprava. Dokument vytvořený vyhodnocením jednoho páru se stane novou hodnotou, vůči které je vyhodnocen další pár.
Pokud první argument není platným dokumentem JSON nebo pokud některý argument cesty není platný výraz cesty nebo obsahuje *
, dojde k chybě. nebo **
zástupný znak.
Příklad 1 – Vložení hodnoty
Zde je příklad demonstrující, jak vložit hodnotu pomocí této funkce.
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Result';
Výsledek:
+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+V tomto případě je 3. argument vložen do pole na zadané cestě. 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_SET('{"Name":"Homer", "Gender":"Muž"}', '$.Age', 39) AS 'Result';Výsledek:
+---------------------------------------------- --+| Výsledek |+----------------------------------------------- -+| {"Věk":39, "Jméno":"Homer", "Pohlaví":"Muž"} |+------------------------- -----------------------+Příklad 2 – Aktualizace hodnoty
Předchozí příklad vložil hodnotu. Tento příklad aktualizuje existující hodnotu.
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":3} |+------------------+Zde je další příklad:
SELECT JSON_SET('{"Jméno":"Homer", "Gender":"Muž"}', '$.Name', "Bart") JAKO 'Výsledek';Výsledek:
+------------------------------------+| Výsledek |+------------------------------------+| {"Jméno":"Bart", "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_SET('[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, bude hodnota aktualizována:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Výsledek';Výsledek:
+------------+| Výsledek |+-----------+| [1, 4, 3] |+------------+Pokud existující hodnota není pole, je automaticky zabaleno jako pole a poté rozšířeno o novou hodnotu. Příklad:
SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) AS 'Result';Výsledek:
+-----------------------+| Výsledek |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+Příklad 4 – Více hodnot
Můžete vložit/aktualizovat více hodnot najednou. Jednoduše přidejte každý pár klíč/hodnota oddělený čárkou. Příklad:
SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') AS 'Výsledek';Výsledek:
+-------------------------------+| Výsledek |+-------------------------------+| {"a":9, "b":2, "c":"Bart"} |+--------------------------- ----+Příklad 5 – 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_SET(@data, '$.Person. Jméno', 'Bart', '$.Person.Hobbies[1]', "Nešlechetnost") JAKO 'Výsledek';Výsledek:
+---------------------------------------------- --------------------+| Výsledek |+----------------------------------------------- -------------------+| {"Osoba":{"Jméno":"Bart", "Hobby":["Jídlo", "Neplechy"]}} |+------------------- ----------------------------------------------+Viz také
JSON_INSERT()
pro vkládání hodnot bez nahrazování existujících hodnot aJSON_REPLACE()
pro nahrazení pouze existujících hodnot.