Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql json_unquote与json_extract使用

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

作者: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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文