当前位置:   article > 正文

mysql 查询json深层的数组_mysql 动态访问json数组元素

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]}  |
+----+------------------------------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

这将返回:

+----+-----+
| id | age |
+----+-----+
| 1  | 25  |
+----+-----+
  • 1
  • 2
  • 3
  • 4
  • 5

要查询嵌套在深层的数组,可以使用多个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]}}      |
+----+--------------------------------------------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

这将返回:

+----+-----+
| id | age |
+----+-----+
| 1  | 25  |
+----+-----+
  • 1
  • 2
  • 3
  • 4
  • 5

您可以根据需要调整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}]}}       |
+----+---------------------------------------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

这将返回:

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

注意,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"%';
  • 1
  • 2
  • 3

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/989060
推荐阅读
相关标签
  

闽ICP备14008679号