JSON_EXTRACT 是 MySQL 提供的一个非常重要的函数,用于从 JSON 数据中提取指定的元素。自 MySQL 5.7 引入对 JSON 类型的支持以来,JSON_EXTRACT 在处理 JSON 格式的数据时,成为了查询 JSON 数据的基础工具。该函数允许用户通过路径表达式访问 JSON 对象或数组中的特定值。

  1. JSON_EXTRACT 的基本用法

JSON_EXTRACT 函数接受两个参数:一个是包含 JSON 数据的列或表达式,另一个是路径表达式,用于指定要提取的元素。

语法:
sql
复制代码
JSON_EXTRACT(json_doc, path)
json_doc 是一个有效的 JSON 文档,可以是 JSON 字符串、JSON 列或表达式。
path 是一个 JSON 路径表达式,表示要提取的元素位置,通常以 $ 开头。可以通过点 . 表示子元素,或者使用方括号 [] 表示数组中的元素。
示例:
sql
复制代码
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
此查询会返回结果:

json
复制代码
"John"
在这个例子中,JSON_EXTRACT 提取了 JSON 对象中键 name 对应的值。

  1. 路径表达式详解

根路径 $:表示整个 JSON 文档的起点。
点运算符 .:用于访问对象中的属性。
方括号 []:用于访问数组中的元素。
示例1:提取数组中的值
sql
复制代码
SELECT JSON_EXTRACT('[10, 20, 30]', '$[1]');
返回结果为:

json
复制代码
20
这里 $.[] 表示数组的索引,索引从0开始。

示例2:嵌套对象中的提取
sql
复制代码
SELECT JSON_EXTRACT('{"person": {"name": "Alice", "age": 25}}', '$.person.name');
返回:

json
复制代码
"Alice"
此处通过路径 $.person.name 访问嵌套对象中的属性。

  1. 应用场景

3.1 数据库查询中的 JSON 数据提取
在存储有 JSON 格式数据的数据库表中,可以使用 JSON_EXTRACT 来提取特定字段。例如,一个表中存储用户的配置数据,每个用户的偏好设置以 JSON 格式存储:

sql
复制代码
SELECT JSON_EXTRACT(preferences, '$.theme') AS theme FROM users WHERE id = 1;
3.2 处理复杂结构的数据
对于包含复杂嵌套结构的数据,JSON_EXTRACT 可以非常方便地提取特定的子结构。例如:

sql
复制代码
SELECT JSON_EXTRACT('{"order": {"id": 101, "items": [{"name": "Laptop"}, {"name": "Phone"}]}}', '$.order.items[0].name');
返回:

json
复制代码
"Laptop"
这个例子展示了如何从嵌套的数组和对象中提取数据。

3.3 用于API数据响应
在现代 API 开发中,后端通常会返回 JSON 格式的数据。通过 JSON_EXTRACT,开发者可以直接从数据库中提取所需的数据结构并响应客户端请求。例如:

sql
复制代码
SELECT JSON_EXTRACT(api_response, '$.data.user.email') FROM api_logs;

  1. JSON_EXTRACT 与其他函数结合

JSON_EXTRACT 通常与 JSON_UNQUOTE 结合使用,因为 JSON_EXTRACT 返回的是带引号的 JSON 值,而某些场景可能需要去掉引号。例如:

sql
复制代码
SELECT JSON_UNQUOTE(JSON_EXTRACT('{"name": "John"}', '$.name'));
返回结果为:

sql
复制代码
John
JSON_UNQUOTE 可以将返回的 JSON 数据转换为纯字符串。

  1. 总结

JSON_EXTRACT 是 MySQL 中一个非常有用的函数,尤其是在处理 JSON 数据时,它允许开发者以灵活的方式从复杂的数据结构中提取所需信息。通过使用路径表达式,它可以准确定位和提取嵌套对象或数组中的数据,为处理现代应用中的 JSON 数据提供了强有力的支持。

GBase 8a分析型数据库的主要市场是商业分析和商业智能市场。产品主要应用在政府、党委、安全敏感部门、国防、统计、审计、银监、证监等领域,以及电信、金融、电力等拥有海量业务数据的行业。
Q:GBase 8a能干什么?
A:GBase 8a能够实现大数据的全数据(结构化数据、半结构化数据和非结构化数据)存储管理和高效分析,为行业大数据应用提供完整的数据库解决方案。
Q:GBase 8a的水平如何?
A:GBase 8a能够在百TB至PB级数据规模下实现数据查询的秒级响应;能够帮助客户节省50%-90%存储空间;能够为客户节省50%-90%的投资和运维成本;能够对结构化、半结构化和非结构化数据进行统一处理;能够实现千亿级文本条目全文检索的秒级响应;能够提供全过程可视化的数据查询分析及展现工具。


GBase数据库
1 声望2 粉丝

GBase数据库知识分享