在处理mysql 有存储的json字段,需要提取时候发现JSON_EXTRACT函数,发现此函数提取后会带有引号,组合使用JSON_UNQUOTE 可去掉引号!
JSON_EXTRACT 函数概述
JSON_EXTRACT是MySQL中用于从JSON文档中提取数据的函数,语法为JSON_EXTRACT(json_doc, path[, path]...)
。它支持JSON路径表达式,返回匹配路径的数据。MySQL 5.7及以上版本支持该函数。
基本语法
JSON_EXTRACT(json_doc, path)
json_doc
: 包含JSON数据的列或字符串。path
: JSON路径表达式,如$.key
或$[index]
。
路径表达式示例
提取JSON对象中的值:
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
-- 返回: "John"
提取JSON数组中的元素:
SELECT JSON_EXTRACT('["apple", "banana", "cherry"]', '$[1]');
-- 返回: "banana"
提取嵌套数据
对于嵌套JSON结构,路径表达式可多层访问:
SELECT JSON_EXTRACT('{"person": {"name": "Alice", "age": 25}}', '$.person.name');
-- 返回: "Alice"
提取多个路径
函数支持同时提取多个路径,返回结果以JSON数组形式呈现:
SELECT JSON_EXTRACT('{"a": 1, "b": 2}', '$.a', '$.b');
-- 返回: [1, 2]
简化写法:->
操作符
MySQL提供了->
操作符作为JSON_EXTRACT
的简写:
SELECT column_name->'$.key' FROM table_name;
-- 等效于: JSON_EXTRACT(column_name, '$.key')
注意事项
- 路径表达式区分大小写。
- 路径不存在时返回
NULL
。 - 提取的数据类型与JSON文档一致(如字符串带引号)。
- 需确保
json_doc
为有效JSON格式,否则可能报错。
实际应用示例
假设表users
有JSON列profile
:
{
"name": "Tom",
"contacts": {
"email": "tom@example.com",
"phone": "123456789"
}
}
查询电子邮件:
SELECT JSON_EXTRACT(profile, '$.contacts.email') FROM users;
-- 或使用简写:
SELECT profile->'$.contacts.email' FROM users;
与JSON_UNQUOTE
结合使用
若需去除提取结果的引号(如字符串类型),可搭配JSON_UNQUOTE
:
SELECT JSON_UNQUOTE(JSON_EXTRACT('{"name": "John"}', '$.name'));
-- 返回: John(不带引号)
该函数在MySQL的JSON数据处理中广泛用于字段提取和嵌套查询。