[英]SQL Server parse nested json using OPENJSON
我正在嘗試讀取 JSON,我想解析 SQL 服務器中的每個集合。
結構如下 Root > Action > GoActionFiles / Pools
我想為每個 GoActionFiles > GoActionFile 返回一行,所以它看起來像下面這樣;
JSON如下;
DECLARE @Json NVARCHAR(MAX)
SET @Json =
N'
{
"Root":{
"Action":{
"ActionId":1,
"OutcomeId":2,
"ActionDateTime":"2022-11-22T14:28:20.9700312+00:00",
"GoActionFiles":{
"GoActionFile":[
{
"Name":"Arigon",
"Status":"Failed"
},
{
"Name":"Butella",
"Status":"Passed"
},
{
"Name":"Chantice",
"Status":"Passed"
},
{
"Name":"Fordwat",
"Status":"Passed"
}
]
},
"Pools":{
"Pool":[
{
"Name":"Arigon",
"Status":"Passed"
},
{
"Name":"Butella",
"Status":"Failed"
},
{
"Name":"Chantice",
"Status":"Failed"
},
{
"Name":"Fordwat",
"Status":"Failed"
}
]
},
"ExtCheck":{
"Score":800,
"ExtStatus":"Passed",
"IntScore":0
}
}
}
'
到目前為止,我已經嘗試了以下 SQL;
SELECT ActionId, a.GoActionFiles FROM OPENJSON(@Json, '$.Root.Action') WITH
(
ActionId INT,
GoActionFiles NVARCHAR(MAX) AS JSON
) AS a
如果只有一個 actionID,我懷疑這會更高效
Select ActionID = JSON_VALUE(@Json,'$.Root.Action.ActionId')
,GoActionFileName = [Name]
,GoActionFileStatus = [Status]
From OpenJSON(@Json, '$.Root.Action.GoActionFiles.GoActionFile')
with ( [Name] varchar(150),
[Status] varchar(150)
) AS a
如果多個ID
SELECT A.ActionId
,GoActionFileName = B.[Name]
,GoActionFileStatus = B.[Status]
FROM OPENJSON(@Json, '$.Root.Action') WITH (
ActionId INT,
GoActionFiles NVARCHAR(MAX) AS JSON
) A
Cross Apply ( Select *
From OpenJSON(GoActionFiles, '$.GoActionFile')
with ( [Name] varchar(150),
[Status] varchar(150)
) B1
) B
兩者都返回
ActionId GoActionFileName GoActionFileStatus
1 Arigon Failed
1 Butella Passed
1 Chantice Passed
1 Fordwat Passed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.