如何解决如何使用 SQL Server 解析列表的 JSON 列表
从以以下格式返回数据的 API 解析 SQL Server 数据库中的数据:
declare @json nvarchar(4000) = N'{
"List":{
"header":{
"id":"id1","resolution":"Hourly"
},"values":[
[
{
"dateTime":"2020-10-01T00:00:00","unit":"MWh","val":0.9
},{
"dateTime":"2020-10-01T01:00:00","val":1.1
}
],[
{
"dateTime":"2020-10-02T00:00:00","val":0.5
},{
"dateTime":"2020-10-02T01:00:00","val":0.3
}
]
]
}
}'
问题在于键值内部是 json 中的列表列表。我想要以下格式的数据:
id | 日期时间 | 单位 | val |
---|---|---|---|
id1 | 2020-10-01T00:00:00 | 兆瓦时 | 0.9 |
id1 | 2020-10-01T01:00:00 | 兆瓦时 | 1.1 |
id1 | 2020-10-02T00:00:00 | 兆瓦时 | 0.5 |
id1 | 2020-10-02T01:00:00 | 兆瓦时 | 0.3 |
我已经用这个代码测试过:
SELECT
(SELECT *
FROM OPENJSON (@json,'$.List.header')
WITH (entityid varchar(200) '$.id')) id,*
FROM
OPENJSON (@json,'$.List.values')
WITH (datetime datetime '$.dateTime',unit varchar(10) '$.unit',val float '$.val')
但我明白
id | 日期时间 | 单位 | val |
---|---|---|---|
id1 | 空 | 空 | 空 |
id1 | 空 | 空 | 空 |
id1 | 空 | 空 | 空 |
id1 | 空 | 空 | 空 |
解决方法
这是因为在 values
中有数组。一种方法如下:
SELECT CONVERT(varchar(50),JSON_VALUE(l.header,'$.id')) AS id,vv.*
FROM OPENJSON(@json,'$.List')
WITH (header nvarchar(MAX) AS JSON,[values] nvarchar(MAX) AS JSON) l
CROSS APPLY OPENJSON(l.[values]) v
CROSS APPLY OPENJSON(v.value)
WITH ([dateTime] datetime2(0),unit varchar(20),val decimal(5,1)) vv;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。