无法使用 OPENJSON 和 SQL Server 2017 解析带有动态键的对象数组

Can't parsing an array of objects with Dynamic Keys using OPENJSON And SQL Server 2017

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

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

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

有没有一种方法可以在不显式引用每个 ObjectId 的情况下执行此操作,理想情况下我想 return table 中的所有产品项目并且只有一个带有 categoryId 的字段。

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

尝试这样的事情:

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