簡介
- MySQL 5.7 或更高版本,可以使用
->>
和->
運算符簡化語法 - 這兩個操作符都是用于提取 JSON 數據的,但有一些重要區別
->
操作符
-
功能:提取 JSON 對象的指定路徑的值
-
返回類型:返回 JSON 類型的值(可能帶有引號)
-
等效于:
JSON_EXTRACT(json_doc, path)
-
示例:
SELECT additional_info->'$.source' FROM calendar;
如果
additional_info
是{"source": "google"}
,返回的是 JSON 格式的"google"
(帶引號)
->>
操作符
-
功能:提取 JSON 對象的指定路徑的值并取消引用
-
返回類型:返回字符串類型的值(去掉引號)
-
等效于:
JSON_UNQUOTE(JSON_EXTRACT(json_doc, path))
-
示例:
SELECT additional_info->>'$.source' FROM calendar;
同樣的數據會返回字符串
google
(不帶引號)
關鍵區別對比
特性 | -> | ->> |
---|---|---|
返回值類型 | JSON 類型(可能帶引號) | 字符串類型(無引號) |
等效函數 | JSON_EXTRACT() | JSON_UNQUOTE(JSON_EXTRACT()) |
使用場景 | 需要保留JSON格式時 | 需要普通字符串時 |
NULL處理 | 路徑不存在返回NULL | 路徑不存在返回NULL |
實際應用示例
-- 假設 additional_info = '{"source": "google", "score": 5}'SELECT additional_info->'$.source' AS with_quotes, -- 返回 ""google"" (JSON字符串)additional_info->>'$.source' AS without_quotes, -- 返回 "google" (普通字符串)additional_info->'$.score' AS score_json, -- 返回 5 (JSON數字)additional_info->>'$.score' AS score_string -- 返回 "5" (字符串)
FROM calendar;
何時使用哪個
- 使用
->>
當:- 你需要直接比較或作為字符串使用
- 你需要去除JSON字符串的引號
- 你需要將結果與其他字符串連接
- 使用
->
當:- 你需要保持JSON格式進行進一步JSON操作
- 你需要確保返回的是有效的JSON值
- 你要將結果傳遞給其他JSON函數