gpt4 book ai didi

sql - 如何将嵌套的 JSON 导入到 SQL Server 表中?

转载 作者:行者123 更新时间:2023-12-05 09:14:47 25 4
gpt4 key购买 nike

我有一个嵌套的 JSON 变量(我在这里使用缩短的版本),我想将其插入到表中。我能够采用不嵌套的列和值,但在嵌套部分中苦苦挣扎。我想要的是检索 2 行:一行用于 sessionID = 20,另一行用于 30 和子列。我正在使用 SQL Server 2017。

DECLARE @json NVARCHAR(MAX)
SET @json =
N'{
"List":
[
{
"ID": 13,
"Date": "2015-12-07",
"SessionID": {
"20": {
"discount": "no",
"price": 15.99
},
"30": {
"discount": "yes",
"price": 12.99
}
}
}
]
}'



SELECT *
FROM OPENJSON(@json, N'lax $.List')
WITH (ID int '$.ID'
,[Date] date '$.Date'
,SessionID nvarchar(max) N'lax $.SessionID' AS JSON
)

我想检索如下数据。在此先感谢您的帮助!

I would like retrieve query like this

最佳答案

正如 Zohard Peled 告诉您的那样,JSON 的内部结构有待改进。一般来说,将数据作为元素名称放置不是一个好主意。最好使用类似 "SessionID":"20" 的内容,而您的 JSON 将 "20" 作为以下对象的名称。

不过,这可以通过使用 OPENJSONkey 列来完成:

DECLARE @json NVARCHAR(MAX)
SET @json =
N'{
"List":
[
{
"ID": 13,
"Date": "2015-12-07",
"SessionID": {
"20": {
"discount": "no",
"price": 15.99
},
"30": {
"discount": "yes",
"price": 12.99
}
}
}
]
}'

--查询将逐步遍历您的结构:

SELECT B.ID
,B.[Date]

,C.[key] AS SessionID --here's the magic...

,JSON_VALUE(C.[value],'$.discount') AS discount
,JSON_VALUE(C.[value],'$.price') AS price
FROM OPENJSON(@json)
WITH(List NVARCHAR(MAX) AS JSON) A --getting "List" as JSON
CROSS APPLY OPENJSON(A.List)
WITH(ID INT
,[Date] DATE
,SessionID NVARCHAR(MAX) AS JSON) B --getting "ID" and "Date" and "SessionID as JSON
CROSS APPLY OPENJSON(B.SessionID) C; --get the objects within the array, but nameless...

结果:

ID  Date    SessionID   discount    price
13 2015-12-07 20 no 15.99
13 2015-12-07 30 yes 12.99

关于sql - 如何将嵌套的 JSON 导入到 SQL Server 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53529183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com