3

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

我在文档中遇到了一个嵌套数组(下面的示例),它使用动态 ObjectId 即 123 作为对象键,而不是使用静态键,即类别,然后有一个单独的键:值来引用 ObjectId。

因此,如果不指定每个单独的对象 ID(有数千个),我就无法使用常规的 CROSS APPLY OPENJSON 语法将项目提取到表中?

有没有一种方法可以在不明确引用每个 ObjectId 的情况下做到这一点,理想情况下我想返回表中的所有产品项目,并且只有一个带有 categoryId 的字段。

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

1 回答 1

2

尝试这样的事情:

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
于 2018-03-18T20:10:51.090 回答