无法使用OPENJSON和SQL Server 2017使用动态密钥解析对象数组

时间:2018-03-15 13:22:24

标签: json sql-server sql-server-2017 sql-server-json

我在使用SQL Server 2017解析一组JSON文档时遇到了一些麻烦。

我在文档中遇到了一个嵌套数组(下面的示例),该文档使用动态ObjectId,即123作为对象Key,而不是使用静态键,即Category,然后使用单独的key:value来引用ObjectId。 / p>

因此,我不能使用常规的CROSS APPLY OPENJSON语法将项目提取到表中而不指定每个单独的Object Id(有数千个)?

有没有办法在没有明确引用每个ObjectId的情况下执行此操作,理想情况下我想返回表中的所有产品项,并且只有categoryId的字段。

 "ProductItems": {
            "123": [
              {
                "item": "13663"
              }
            ]
            "124": [
              {
                "value": "2336"
              },
              {
                "value": "3667"
              }             
            ],
            "453": [
              {
                "value": "8667"
              },
              {
                "value": "1956"
              }
            ]
          }

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

DECLARE @x NVARCHAR(MAX)=
'{"ProductItems":{
"123": [
    {
    "item": "13663"
    }
],
"124": [
    {
    "value": "2336"
    },
    {
    "value": "3667"
    }             
],
"453": [
    {
    "value": "8667"
    },
    {
    "value": "1956"
    }
]
}}'

SELECT j2.*, j3.* FROM OPENJSON(@x) j1
CROSS APPLY OPENJSON(j1.Value) j2
CROSS APPLY OPENJSON(j2.Value) j3