简介
- 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函数