使用属性值从 MS SQL Server 中的 JSON blob 中检索特定值?

Posted

技术标签:

【中文标题】使用属性值从 MS SQL Server 中的 JSON blob 中检索特定值?【英文标题】:Retrieve specific value from a JSON blob in MS SQL Server, using a property value? 【发布时间】:2021-03-04 16:29:13 【问题描述】:

在我的数据库中,我有一列存储 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 数组中,我想从 component 中提取第二个值,其中 ID 为“3”(除此之外,但这是一个很好的例子)。所以,我想提取值“02/26/2021 - Weekly”存储在自己的列中。

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

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

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

【问题讨论】:

【参考方案1】:

您需要使用OPENJSON 分解内部数组,然后使用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'

【讨论】:

以上是关于使用属性值从 MS SQL Server 中的 JSON blob 中检索特定值?的主要内容,如果未能解决你的问题,请参考以下文章

根据 SQL Server 中表中的列值从两个表中获取一个新表:

到 SQL Server 的 MS Access 通用直通查询

SQL Server 扩展属性 MS_SubdatasheetName

SQL Server:将列数据值从一个表复制到同一数据库中的另一个表

在 C# 中将十六进制值从 SQL Server 转换为日期时间

SQL Server 标识列值从 0 而不是 1 开始