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 DDL 引发的同步延迟该如何解决

    MySQL DDL 引发的同步延迟该如何解决

    这篇文章主要介绍了MySQL DDL 引发的同步延迟该如何解决,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • MySQL order by实现原理分析和Filesort优化方式

    MySQL order by实现原理分析和Filesort优化方式

    这篇文章主要介绍了MySQL order by实现原理分析和Filesort优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MySQL在不知道列名情况下的注入详解

    MySQL在不知道列名情况下的注入详解

    这篇文章主要给大家介绍了关于MySQL在不知道列名情况下的注入的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 关于Mysql子查询的三个应用场景

    关于Mysql子查询的三个应用场景

    这篇文章主要介绍了关于Mysql子查询的三个应用场景,子查询是在一个完整的查询语句中,嵌套不同功能的小查询,从而完成复杂查询的一种编写形式,需要的朋友可以参考下
    2023-07-07
  • 使用SQL将多行记录合并成一行实例代码

    使用SQL将多行记录合并成一行实例代码

    今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,这篇文章主要给大家介绍了关于使用SQL将多行记录合并成一行的相关资料,需要的朋友可以参考下
    2022-09-09
  • 详解Mysql基础语法的使用

    详解Mysql基础语法的使用

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。这篇文章主要介绍了Mysql基础语法的使用,需要的朋友可以参考下
    2018-07-07
  • 快速排查与解决MySQL锁表问题的流程步骤

    快速排查与解决MySQL锁表问题的流程步骤

    当数据库查询阻塞关键业务时,你可能正遭遇锁表,本文将手把手教你用一条SQL定位锁表现场,并安全解除锁定,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2025-07-07
  • kali虚拟机mysql修改绑定ip的问题

    kali虚拟机mysql修改绑定ip的问题

    这篇文章主要介绍了kali虚拟机mysql修改绑定ip,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • lnmp下如何关闭Mysql日志保护磁盘空间

    lnmp下如何关闭Mysql日志保护磁盘空间

    这篇文章主要介绍了lnmp下如何关闭Mysql日志保护磁盘空间的相关资料,需要的朋友可以参考下
    2015-09-09
  • MySQL如何改变表的存储引擎方式

    MySQL如何改变表的存储引擎方式

    这篇文章主要介绍了MySQL如何改变表的存储引擎方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论