mysql JSON_EXTRACT JSON_UNQUOTE 函数

发布于:2025-06-18 ⋅ 阅读:(20) ⋅ 点赞:(0)

在处理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数据处理中广泛用于字段提取和嵌套查询。


网站公告

今日签到

点亮在社区的每一天
去签到