将数组的JSON数组解析为SQL表
我有一个来自API的JSON响应,如下所示:将数组的JSON数组解析为SQL表,sql,arrays,json,sql-server,Sql,Arrays,Json,Sql Server,我有一个来自API的JSON响应,如下所示: { "series":[ { "series_id": "SER_ID_1", "data": [ ["20200101", 1.0 ], ["20200102", 1.9 ],
{
"series":[
{
"series_id": "SER_ID_1",
"data": [
["20200101",
1.0
],
["20200102",
1.9
],
["20200103",
4.5
]
]
},
{
"series_id": "SER_ID_2",
"data": [
["20200101",
6.0
],
["20200102",
8.9
],
["20200103",
1.5
]
]
}
]
}
在数据中可以有N个系列
和N个值
我想在SQL中解析此JSON,以便得到以下结果:
series_id date value
SER_ID_1 20200101. 1.0
SER_ID_1 20200102. 1.9
SER_ID_1 20200103. 4.5
SER_ID_2 20200101. 6.0
SER_ID_2 20200102. 8.9
SER_ID_2 20200103. 1.5
请提供SQL server查询以获得解析JSON时所需的结果
提前感谢。您需要使用适当的显式模式使用OPENJSON()
两次解析输入JSON。当然,您需要SQL Server 2016+来使用内置的JSON支持
JSON:
声明:
SELECT j1.series_id, j2.[date], j2.[value]
FROM OPENJSON(@json, '$.series') WITH (
series_id varchar(10) '$.series_id',
data nvarchar(max) '$.data' AS JSON
) j1
OUTER APPLY OPENJSON(j1.data) WITH (
[date] date '$[0]',
[value] numeric(5, 1) '$[1]'
) j2
结果:
series_id date value
SER_ID_1 2020-01-01 1.0
SER_ID_1 2020-01-02 1.9
SER_ID_1 2020-01-03 4.5
SER_ID_2 2020-01-01 6.0
SER_ID_2 2020-01-02 8.9
SER_ID_2 2020-01-03 1.5
我知道,我用了一个不正确的词,比如“提供”,但没有提到我试过什么。我曾尝试使用OPENJSON交叉应用程序,但没有成功。我总是自己先尝试,只是没有恰当地表达这个问题。非常感谢@zhorov。我用cross apply做了同样的尝试,用了三次。再次感谢你,这很有帮助。
series_id date value
SER_ID_1 2020-01-01 1.0
SER_ID_1 2020-01-02 1.9
SER_ID_1 2020-01-03 4.5
SER_ID_2 2020-01-01 6.0
SER_ID_2 2020-01-02 8.9
SER_ID_2 2020-01-03 1.5