首页 > 解决方案 > 在 T-SQL 中解析对象内的 JSON 数组

问题描述

我有一个这样的json数组:

{
    "TagsDictionary": [
        { 
            "key" : "property1",
            "value" : "property1Value"
        },
        {
            "key" : "property2",
            "value" : "property2Value"
        }
    ]
}

我需要在 T-SQL 中查询它。我想要这个结果:

property1      | property2
property1Value | property2Value

我阅读了文档。但我无法用我的结构取得结果。不幸的是,JSON 存储在数据库中,我无法更改它,因为其他模块依赖于它。

我正在使用 SQL Server 2016。

标签: sqljsonsql-server

解决方案


不是 100% 确定这是您正在寻找的

例子

Declare @YourTable table (ID int,JSON varchar(max))
Insert Into @YourTable values
(1,'{"TagsDictionary": [{"key" : "property1","value" : "property1Value"},{"key" : "property2","value" : "property2Value"}]}')


;with cte as (
Select A.ID
      ,RN  = row_number() over (partition by id,Indx order by B.[Key])
      ,CN  = Indx+1
      ,B.[value] 
From  @YourTable A
Cross Apply (
                Select Indx = B.[key]
                      ,C.[key]
                      ,C.[value] 
                 From  OpenJSON(A.JSON) A
                 Cross Apply OpenJSON(A.Value) B
                 Cross Apply OpenJSON(B.Value) C
            ) B
) 
Select *
 From  cte
 Pivot ( max(value) for CN in ([1],[2]) ) pvt

退货

ID  RN  1               2
1   1   property1       property2
1   2   property1Value  property2Value

推荐阅读