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_docje dokument JSON.pathje cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.valje 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.