sql - 在 T-SQL 中解析对象内的 JSON 数组
问题描述
我有一个这样的json数组:
{
"TagsDictionary": [
{
"key" : "property1",
"value" : "property1Value"
},
{
"key" : "property2",
"value" : "property2Value"
}
]
}
我需要在 T-SQL 中查询它。我想要这个结果:
property1 | property2
property1Value | property2Value
我阅读了文档。但我无法用我的结构取得结果。不幸的是,JSON 存储在数据库中,我无法更改它,因为其他模块依赖于它。
我正在使用 SQL Server 2016。
解决方案
不是 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
推荐阅读
- php - Laravel 无法使用 DB::getDatabaseName() 获取正确的数据库名称
- typescript - 使用 TaskTimer 每 n 秒调用一次函数
- asp.net - 为什么第二次调用 Html.Action 失败?
- sql - 将这些行转换为列
- python - 如何检查当前代码是否是 try-except-block 的一部分?
- python - Ldap 脚本仅适用于一封电子邮件
- c# - Datagridview行数据删除查询代码不能正常工作
- dafny - 为了满足达夫尼
- windows - 如何在 wxPython 中使用 cx_freeze?
- sql - bigQuery ANY_VALUE 不确定?