I MySQL finns det ett antal funktioner som hjälper dig att arbeta med JSON-dokument. Dessa inkluderar JSON_SET() , JSON_INSERT() , och JSON_REPLACE() funktioner.
Dessa tre funktioner är relaterade, men de skiljer sig något åt.
Syntax
Först, här är syntaxen för alla tre funktionerna:
JSON_SET(json_doc, sökväg, val[, sökväg, val] ...)JSON_INSERT(json_doc, sökväg, val[, sökväg, val] ...)JSON_REPLACE(json_doc, sökväg, val[, sökväg, val] ...)
Så alla tre funktioner accepterar samma argument. Här är vad dessa argument är till för:
json_docär JSON-dokumentet.pathär sökvägen till elementet för vilket data ska infogas eller uppdateras värdet på.valär det nya värdet.
Skillnaden
Här är skillnaden mellan dessa funktioner:
JSON_SET()ersätter befintliga värden och lägger till icke-existerande värden.JSON_INSERT()infogar värden utan att ersätta befintliga värden.JSON_REPLACE()ersätter endast befintliga värden.
Så i princip vilket du använder beror på om du uppdaterar ett befintligt värde eller infogar ett nytt (även om JSON_SET() gör båda).
Exempel 1 – Infoga ett värde
Här är exempel för att visa skillnaden mellan dessa tre funktioner.
JSON_SET()
Här är vad som händer om vi försöker infoga ett nytt värde med JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat'; Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+
Så det fungerade perfekt.
JSON_INSERT()
Här är vad som händer om vi försöker infoga ett nytt värde med JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+
Exakt samma resultat som med JSON_SET() .
JSON_REPLACE()
Här är vad som händer om vi försöker infoga ett nytt värde med JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+
I det här fallet infogades inte det nya värdet. Det ursprungliga JSON-dokumentet returneras oförändrat. Detta beror på att den här funktionen bara ersätter befintliga värden – den infogar inte nya.
Exempel 2 – Uppdatera ett befintligt värde
Nu för att uppdatera befintliga värden.
JSON_SET()
Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+
Så igen, det fungerade perfekt. Vi har framgångsrikt uppdaterat det andra nyckel/värdeparet med det nya värdet.
JSON_INSERT()
Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+
I det här fallet uppdaterades inte det befintliga värdet. JSON-dokumentet returneras oförändrat. Detta beror på att JSON_INSERT() Funktionen infogar bara nya värden – den uppdaterar inte befintliga.
JSON_REPLACE()
Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+
Den uppdaterar perfekt.