你提到的 `JSON_UNQUOTE(JSON_EXTRACT())` 是 MySQL 中处理 JSON 数据的常用组合操作。以下是具体解释和示例:.md
你提到的 JSON_UNQUOTE(JSON_EXTRACT()) 是 MySQL 中处理 JSON 数据的常用组合操作。以下是具体解释和示例:
功能说明
-
JSON_EXTRACT(json, path)- 从 JSON 列中提取指定路径(path)的值。
- 返回结果会保留原始 JSON 类型(例如字符串会带双引号
")。
-
JSON_UNQUOTE(json)- 去除 JSON 字符串值的外层双引号
"。 - 如果输入不是字符串(如数字、布尔值等),则直接返回原始值。
- 去除 JSON 字符串值的外层双引号
组合使用
SELECT JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.path'))
FROM your_table;
示例
假设表 users 的 profile 列存储以下 JSON 数据:
{
"name": "Alice",
"age": 30,
"address": {
"city": "New York"
}
}
需求:提取 name 的值并去除引号
SELECT
JSON_EXTRACT(profile, '$.name') AS raw_value, -- 返回 "\"Alice\""
JSON_UNQUOTE(JSON_EXTRACT(profile, '$.name')) AS clean_value -- 返回 "Alice"
FROM users;
结果:
| raw_value | clean_value |
|---|---|
| ""Alice"" | Alice |
注意事项
-
路径语法:
- 使用
$表示根对象。 - 点符号或方括号访问嵌套字段:
-- 提取 address.city SELECT JSON_UNQUOTE(JSON_EXTRACT(profile, '$.address.city'));
- 使用
-
类型处理:
- 如果提取的是数字或布尔值(如
$.age),JSON_UNQUOTE不会影响其类型:SELECT JSON_UNQUOTE(JSON_EXTRACT(profile, '$.age')); -- 返回 30(整数)
- 如果提取的是数字或布尔值(如
-
空值处理:
- 如果路径不存在或数据格式错误,返回
NULL。
- 如果路径不存在或数据格式错误,返回
工具函数调用示例
假设你需要动态生成上述 SQL 查询,请调用以下工具函数:
<tools>
{

浙公网安备 33010602011771号