V MySQL je to JSON_REPLACE()
funkce nahradí hodnoty v dokumentu JSON a vrátí výsledek.
Jako první argument zadáte dokument JSON, za nímž následuje cesta k nahrazení dat a za ním hodnota, kterou se má nahradit stávající hodnota.
V případě potřeby můžete nahradit data na více místech v dokumentu. Chcete-li to provést, jednoduše zadejte více párů cesta/hodnota podle potřeby.
Syntaxe
Syntaxe vypadá takto:
JSON_REPLACE(json_doc, cesta, hodnota[, cesta, hodnota] ...)
Kde json_doc
je dokument JSON, path
je cesta k nahrazení dat na a val
je nová hodnota, která nahradí stávající hodnotu.
Dvojice 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 pár cesta/hodnota v dokumentu JSON neexistuje, je ignorován a nemá žádný účinek.
První argument musí být platný dokument JSON, jinak dojde k chybě.
Také path
argument musí být platný výraz cesty a nesmí obsahovat *
nebo **
zástupný znak, jinak dojde k chybě.
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT JSON_REPLACE('{"a":1, "b":2, "c":3}', '$.b', 9) AS 'Result';
Výsledek:
+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":9, "c":3} |+--------------------------+V tomto případě jsme nahradili
b
s hodnotou9
. Je to proto, že jsme zadali$.b
jako druhý argument a9
jako třetí.Zde je další příklad:
SELECT JSON_REPLACE('{"Jméno":"Bart", "Věk":10}', '$.Name', 'Nelson - Ha Ha!') AS 'Výsledek';Výsledek:
+----------------------------------------+| Výsledek |+----------------------------------------+| {"Věk":10, "Jméno":"Nelson - Ha Ha!"} |+----------------------------- -----------+Příklad 2 – Neexistující cesta
Pokud zadáte cestu, která neexistuje, nic se neodstraní. Původní dokument JSON je vrácen bez úprav.
SELECT JSON_REPLACE('{"Jméno":"Homer", "Věk":39}', '$.Gender', 'Muž') AS 'Výsledek';Výsledek:
+------------------------------+| Výsledek |+------------------------------+| {"Věk":39, "Jméno":"Homer"} |+------------------------------+Příklad 3 – Pole
Zde je příklad použití pole.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Výsledek';Výsledek:
+------------+| Výsledek |+-----------+| [9, 2, 3] |+------------+Pole používají číslování založené na nule, takže v tomto případě je nahrazen první prvek.
Zde je další příklad pole. Tentokrát nahradíme hodnotu ve vnořeném poli.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Výsledek';Výsledek:
+-------------------+| Výsledek |+-------------------+| [1, 2, [3, 9, 5]] |+-------------------+Příklad 4 – Více cest
Chcete-li nahradit data na více místech v dokumentu JSON, můžete zadat více než jednu cestu.
Základní příklad:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Výsledek';Výsledek:
+-------------------+| Výsledek |+------------------+| [1, 9, 3, 22, 5] |+------------------+Příklad 5 – Větší dokument JSON
Zde je příklad s (trochu) větším dokumentem JSON.
SET @data ='{ "Osoba":{ "Jméno":"Homer", "Věk":39, "Hobby":["Jídlo", "Spánek"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') JAKO 'Výsledek';Výsledek:
+---------------------------------------------- ----------------------------------+| Výsledek |+----------------------------------------------- ---------------------------------+| {"Osoba":{"Věk":10, "Jméno":"Bart", "Záliby":["Jídlo", "Base Jumping"]}} |+------------- -------------------------------------------------- ------------------+