JSON 到 SQL 服务器:将值的子数组转换为列

JSON to SQL Server: Convert sub-array of values to column

我JSON喜欢

{  
    "url": {
        "web_categories": [{ "id": 226 } , { "id": 401 }]
  },  
   "account":"Basic"  
}

我想在 SQL 中输出一列,其中包含所有 web_categories 的 ID 与 URL 匹配。

| webcat |
|--------|
| 226    |
| 401    |

使用 SQL Server 2016 / Azure SQL 数据库对 JSON 的支持,如何实现?

可重现的例子

DECLARE @jsonInfo VARCHAR(MAX)  
SET @jsonInfo =N'{  
    "url": {
        "web_categories": [{ "id": 226 }]
  },  
   "account":"Basic"  
}'  

之前的迭代

select * from openjson(@jsonInfo)  with (webcat varchar(12) '$.url.web_categories.id[0]')
select * from openjson(@jsonInfo)  with (webcat varchar(12) '$.url.web_categories.id')
select * from openjson(@jsonInfo)  with (webcat varchar(12) '$.url.web_categories')
select * from openjson(@jsonInfo,'$.url.web_categories.id[0]')
select * from openjson(@jsonInfo,'$.url.web_categories.id')
select * from openjson(@jsonInfo,'$.url.web_categories')
select JSON_QUERY(@jsonInfo, '$.url.web_categories.id[0]') webcat
select JSON_QUERY(@jsonInfo, '$.url.web_categories.id')    webcat
select JSON_QUERY(@jsonInfo, '$.url.web_categories')       webcat
select JSON_VALUE(@jsonInfo, '$.url.web_categories.id[0]') webcat
select JSON_VALUE(@jsonInfo, '$.url.web_categories.id')    webcat
select JSON_VALUE(@jsonInfo, '$.url.web_categories')       webcat

使用默认架构,返回的记录带有 value 列,其中包含数组中每个项目的 JSON。这个JSON然后需要处理

DECLARE @jsonInfo VARCHAR(MAX)  
SET @jsonInfo =N'{  
    "url": {
        "web_categories": [{ "id": 226 },{ "id": 411 }]
  },  
   "account":101  
}'  


 SELECT JSON_VALUE(value,'$.id') AS ids FROM OPENJSON(@jsoninfo,'$.url.web_categories')