1

在我的数据库中,我有一列存储 JSON。JSON 看起来像这样:

{
  "views": [
    {
      "id": "1",
      "sections": [
        {
          "id": "1",
          "isToggleActive": false,
          "components": [
            {
              "id": "1",
              "values": [
                "02/24/2021"
              ]
            },
            {
              "id": "2",
              "values": []
            },
            {
              "id": "3",
              "values": [
                "5393",
                "02/26/2021 - Weekly"
              ]
            },
            {
              "id": "5",
              "values": [
                ""
              ]
            }
          ]
        }
      ]
    }
  ]
}

我想创建一个迁移脚本,它将从此 JSON 中提取一个值并将它们存储在自己的列中。

在上面的 JSON 中,在那个数组components中,我想从“3”中提取第二个值(除其他外,这是一个很好的例子)。因此,我想提取值“02/26/2021 - Weekly”以存储在自己的列中。componentID

我正在查看JSON_VALUE 文档,但我只看到了为 json 属性指定索引的示例。我不知道我需要什么样的 json 路径。这甚至可以用 JSON_VALUE 做吗?

编辑:为了澄清,视图和部分组件可以具有静态数组索引,因此我可以为它们使用 views[0].sections[0] 。目前,这就是我的 SQL 查询的全部内容:

SELECT
    *
FROM OPENJSON(@jsonInfo, '$.views[0].sections[0]')
4

1 回答 1

1

您需要使用OPENJSON打破内部数组,然后用 a 过滤它,WHERE最后选择正确的值JSON_VALUE

SELECT
    JSON_VALUE(components.value, '$.values[1]')
FROM OPENJSON (@jsonInfo, '$.views[0].sections[0].components') components
WHERE JSON_VALUE(components.value, '$.id') = '3'
于 2021-03-04T20:21:26.150 回答