MySQL SELECT JSON数组中的所有ID和子ID

时间:2019-02-27 12:11:03

标签: mysql json select

我有一个数据列,其中包含一些记录,例如json数组

[
  {
    "id": 4065,
    "pageTitle": "Lorem Ipsum",
    "children": [
        {
        "id": 4067,
        "pageTitle": "Foo",
      },
      {
        "id": 4072,
        "pageTitle": "Bar",
      }
  },
  {
    "id": 4070,
    "pageTitle": "Another Lorem Ipsum",
    "children": [
        {
        "id": 4068,
        "pageTitle": "Another Foo",
      },
      {
        "id": 4073,
        "pageTitle": "Another Bar",
      }
  }
]

我下面的查询正在获取所有父ID,而忽略子ID

SELECT JSON_EXTRACT(data, "$[*].id")
FROM `my_table`;

// Returns only 4065 & 4067

我该如何获取和获取所有ID(甚至包括子元素或孙子元素等)?

还有一种方法可以将结果作为单索引数组返回,例如

[4065, 4067, 4072, 4070, 4068, 4073]

还是需要以编程方式处理,例如php?

2 个答案:

答案 0 :(得分:0)

在MySQL 5.7中,JSON功能有所限制。但是,您可以提供到JSON_EXTRACT的多个路径,因此,如果您的表的深度不超过2层(即,孙辈但没有曾孙),那么这将起作用:

SELECT JSON_EXTRACT(data, "$[*].id", '$[*].children[*].id', '$[*].children[*].children[*].id')
FROM my_table

Demo on dbfiddle

答案 1 :(得分:0)

不是mysql的答案,如果您的系统上有jq,则可以使用此脚本

jq '[..|.id?]' file

这将遍历整个JSON数据文件(无论其深度如何),并且如果找到了id密钥,它将打印其关联值。

Demo on jqplay