mysql 查询json深层的数组

如果您希望在MySQL中查询JSON深层的数组,可以使用JSON提取函数和表达式。

假设您的JSON数据存储在名为json_column的列中:

+----+------------------------------------------+
| id | json_column                              |
+----+------------------------------------------+
| 1  | {"name": "John", "ages": [25, 30, 35]}   |
| 2  | {"name": "Jane", "ages": [20, 25, 30]}   |
| 3  | {"name": "Alice", "ages": [35, 40, 45]}  |
+----+------------------------------------------+

要查询ages数组的元素,可以使用JSON_EXTRACT()函数和数组索引来获取特定索引位置的值。例如,要获取id为1的记录中ages数组的第一个元素,可以使用以下查询:

SELECT id, JSON_EXTRACT(json_column, '$.ages[0]') AS age
FROM your_table
WHERE id = 1;

这将返回:

+----+-----+
| id | age |
+----+-----+
| 1  | 25  |
+----+-----+

要查询嵌套在深层的数组,可以使用多个JSON_EXTRACT()函数和表达式。例如,假设您的JSON数据更深层嵌套,如下所示:

+----+--------------------------------------------------------+
| id | json_column                                            |
+----+--------------------------------------------------------+
| 1  | {"name": "John", "data": {"ages": [25, 30, 35]}}       |
| 2  | {"name": "Jane", "data": {"ages": [20, 25, 30]}}       |
| 3  | {"name": "Alice", "data": {"ages": [35, 40, 45]}}      |
+----+--------------------------------------------------------+

要查询data中的ages数组,可以使用以下查询:

SELECT id, JSON_EXTRACT(json_column, '$.data.ages[0]') AS age
FROM your_table
WHERE id = 1;

这将返回:

+----+-----+
| id | age |
+----+-----+
| 1  | 25  |
+----+-----+

您可以根据需要调整JSON路径表达式来查询不同层级的深层数组。

您可以使用MySQL的JSON_EXTRACT()函数和适当的JSON路径表达式来查询深层嵌套的数组。如示例,JSON路径表达式是a->b->'$[*]."c'"

假设您的JSON数据存储在名为json_column的列中:

+----+---------------------------------------------------+
| id | json_column                                       |
+----+---------------------------------------------------+
| 1  | {"a": {"b": [{"c": 1}, {"c": 2}, {"c": 3}]}}       |
| 2  | {"a": {"b": [{"c": 4}, {"c": 5}, {"c": 6}]}}       |
| 3  | {"a": {"b": [{"c": 7}, {"c": 8}, {"c": 9}]}}       |
+----+---------------------------------------------------+

要使用该JSON路径表达式查询c数组中的所有元素,可以使用以下查询:

SELECT id, JSON_EXTRACT(json_column, '$.a.b[*]."c"') AS c_values
FROM your_table;

这将返回:

+----+-----------------+
| id | c_values        |
+----+-----------------+
| 1  | [1, 2, 3]       |
| 2  | [4, 5, 6]       |
| 3  | [7, 8, 9]       |
+----+-----------------+

注意,JSON_EXTRACT()函数返回的是一个JSON数组的字符串表示,您可以使用适当的函数对结果进行解析和处理。

如果您想使用LIKE运算符在MySQL中进行类似于文本模式匹配的查询,您可以结合JSON_EXTRACT()函数和LIKE运算符来实现。以下是一个示例查询:

SELECT id, json_column
FROM your_table
WHERE JSON_EXTRACT(json_column, '$.a.b[*]."c"') LIKE '%"5"%';

在上述查询中,LIKE '%"5"%'表示匹配包含字符串"5"的任何位置。这将检查json_column列中的每个"c"元素是否包含字符串"5",并返回满足条件的行。

请注意,LIKE运算符在使用JSON_EXTRACT()函数时可能不是最佳选择,因为它假设目标值是作为字符串存储的,不适用于数字或其他数据类型。对于类似于您提供的示例的情况,使用JSON路径表达式更为合适。LIKE运算符更适用于对文本进行模糊匹配的情况。

猜你喜欢

转载自blog.csdn.net/qq_27487739/article/details/131580519