V MySQL existuje řada funkcí, které vám pomohou pracovat s dokumenty JSON. Patří mezi ně JSON_SET()
, JSON_INSERT()
a JSON_REPLACE()
funkce.
Tyto tři funkce spolu souvisí, přesto se mírně liší.
Syntaxe
Nejprve je zde syntaxe všech tří funkcí:
JSON_SET(json_doc, cesta, hodnota[, cesta, hodnota] ...)JSON_INSERT(json_doc, cesta, hodnota[, cesta, hodnota] ...)JSON_REPLACE(json_doc, cesta, hodnota[, cesta, hodnota] ...)
Všechny tři funkce tedy přijímají stejné argumenty. K čemu tyto argumenty slouží:
json_doc
je dokument JSON.path
je cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.val
je nová hodnota.
Rozdíl
Zde je rozdíl mezi těmito funkcemi:
JSON_SET()
nahradí existující hodnoty a přidá neexistující hodnoty.JSON_INSERT()
vloží hodnoty, aniž by nahradil existující hodnoty.JSON_REPLACE()
nahradí pouze existující hodnoty.
V zásadě tedy to, kterou z nich použijete, závisí na tom, zda aktualizujete existující hodnotu nebo vkládáte novou (ačkoli JSON_SET()
dělá obojí).
Příklad 1 – Vložení hodnoty
Zde jsou příklady, které demonstrují rozdíl mezi těmito třemi funkcemi.
JSON_SET()
Co se stane, když se pokusíme vložit novou hodnotu pomocí JSON_SET()
:
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Result';
Výsledek:
+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+Takže to fungovalo perfektně.
JSON_INSERT()
Co se stane, když se pokusíme vložit novou hodnotu pomocí
JSON_INSERT()
:SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Result';Výsledek:
+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+Přesně stejný výsledek jako u
JSON_SET()
.JSON_REPLACE()
Co se stane, když se pokusíme vložit novou hodnotu pomocí
JSON_REPLACE()
:SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+V tomto případě nebyla nová hodnota vložena. Původní dokument JSON je vrácen beze změny. Je to proto, že tato funkce pouze nahrazuje existující hodnoty – nevkládá nové.
Příklad 2 – Aktualizace existující hodnoty
Nyní k aktualizaci stávajících hodnot.
JSON_SET()
Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí
JSON_SET()
:SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":3} |+------------------+Takže to opět fungovalo perfektně. Úspěšně jsme aktualizovali druhý pár klíč/hodnota novou hodnotou.
JSON_INSERT()
Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí
JSON_INSERT()
:SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+V tomto případě nebyla stávající hodnota aktualizována. Dokument JSON je vrácen beze změny. Je to proto, že
JSON_INSERT()
funkce pouze vkládá nové hodnoty – neaktualizuje stávající.JSON_REPLACE()
Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí
JSON_REPLACE()
:SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) AS 'Result';Výsledek:
+-------------------+| Výsledek |+------------------+| {"a":1, "b":3} |+------------------+Perfektně se aktualizuje.