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.