MySQL 中的 JSON_UNQUOTE 与 JSON_EXTRACT 使用示例详解

 更新时间:2025年12月11日 09:00:24   作者:Asus.Blogs  
文章详细介绍了MySQL中的JSON_EXTRACT和JSON_UNQUOTE函数,包括它们的功能、参数、返回值以及适用场景,通过示例展示了如何提取嵌套对象字段和数组元素,并建议使用IFNULL()或COALESCE()处理路径不存在的情况,感兴趣的朋友跟随小编一起看看吧

1. JSON_EXTRACT(json_doc, path)

功能:从 JSON 字符串中提取指定路径的数据。
参数:
json_doc:要解析的 JSON 字符串(例如 b.settings)。
path:JSON 路径表达式,如 $.level 表示根对象下的 level 字段。
返回值:提取出的值,如果路径不存在则返回 NULL。

JSON_EXTRACT('{"level": "critical"}', '$.level')
-- 返回: "critical"(带引号的字符串)

2. JSON_UNQUOTE(json_value)

功能:将 JSON 提取结果中的引号去掉,返回原始值。
适用场景:当你需要直接操作提取的值而不是带引号的字符串时使用。

JSON_UNQUOTE(JSON_EXTRACT('{"level": "critical"}', '$.level'))
-- 返回: critical(不带引号)

实际应用

{
  "level": "critical",
  "description": "High severity alert"
}
JSON_UNQUOTE(JSON_EXTRACT(b.settings, '$.level')) AS level
JSON_EXTRACT 提取出 "critical"。
JSON_UNQUOTE 将其转换为 critical,便于后续处理或展示。

处理嵌套 JSON 结构

如果 JSON 数据中存在嵌套结构,可以通过扩展路径表达式来提取嵌套值。

示例 1:提取嵌套对象字段

JSON_UNQUOTE(JSON_EXTRACT(b.settings, '$.metadata.region')) AS region
假设 b.settings 如下
{
  "level": "critical",
  "metadata": {
    "env": "production",
    "region": "us-west"
  }
}
$.metadata.region 会提取 us-west

示例 2:提取数组元素

JSON_UNQUOTE(JSON_EXTRACT(b.settings, '$.notifications[0].name')) AS first_notification
{
  "notifications": [
    { "name": "email", "type": "email" },
    { "name": "slack", "type": "slack" }
  ]
}
$.notifications[0].name 会提取 email。
3. 提取数组中的所有值
如果你需要提取整个数组或其中的所有元素,可以使用通配符 *。
示例:提取 notifications 数组中所有 name 字段
SELECT JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.notifications[*].name')) AS names;
输出结果为:["email", "slack"](去除外层引号后仍然是字符串格式)。

如果路径不存在于 JSON 中,JSON_EXTRACT 会返回 NULL。
建议使用 IFNULL() 或 COALESCE() 来提供默认值。

到此这篇关于MySQL 中的 JSON_UNQUOTE 与 JSON_EXTRACT 使用详解的文章就介绍到这了,更多相关mysql json_unquote与json_extract使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql自动定时备份数据库的最佳方法(windows服务器)

    mysql自动定时备份数据库的最佳方法(windows服务器)

    网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作,这里脚本之家小编为大家分享与整理了几个软件方便大家使用
    2016-11-11
  • SQL中的开窗函数(窗口函数)

    SQL中的开窗函数(窗口函数)

    这篇文章主要介绍了SQL中的开窗函数(窗口函数)使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MySQL执行时间的查询

    MySQL执行时间的查询

    这篇文章主要介绍了MySQL执行时间的查询,查询频繁的数据库和查询执行时间长的sql,文章中有详细的代码实例,感兴趣的同学可以参考阅读
    2023-04-04
  • mysql delete 多表连接删除功能

    mysql delete 多表连接删除功能

    这篇文章主要介绍了mysql delete 多表连接删除功能的相关资料,需要的朋友可以参考下
    2017-03-03
  • CentOS7安装MySQL8的超级详细教程(无坑!)

    CentOS7安装MySQL8的超级详细教程(无坑!)

    我们在Linux系统中,如果要使用关系型数据库的话,基本都是用的mysql,这篇文章主要给大家介绍了关于CentOS7安装MySQL8的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Mysql主从复制作用和工作原理详解

    Mysql主从复制作用和工作原理详解

    这篇文章主要介绍了Mysql主从复制作用和工作原理详解,主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库,需要的朋友可以参考下
    2019-07-07
  • ORM模型框架操作mysql数据库的方法

    ORM模型框架操作mysql数据库的方法

    ORM 全称是(Object Relational Mapping)表示对象关系映射; 通俗理解可以理解为编程语言的虚拟数据库;这篇文章主要介绍了ORM模型框架操作mysql数据库的方法,需要的朋友可以参考下
    2021-07-07
  • MySQL 5.7.17 免安装版本的安装配置

    MySQL 5.7.17 免安装版本的安装配置

    这篇文章主要为大家详细介绍了MySQL 5.7.17 免安装版本的安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • MySQL提示Truncated incorrect DOUBLE value解决方法

    MySQL提示Truncated incorrect DOUBLE value解决方法

    这篇文章给大家介绍了MySQL提示Truncated incorrect DOUBLE value报错的四种解决方法,并通过代码给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-02-02
  • mysql查看binlog日志的实现方法

    mysql查看binlog日志的实现方法

    本文主要介绍了配置和查看MySQL 8.01的binlog日志,包括开启binlog日志、配置日志格式、查看日志位置和内容等,具有一定的参考价值,感兴趣的可以了解一下
    2024-11-11

最新评论