[英]JSON SQL Server 2016 parse
我有一個嵌套的 JSON 作為表單的輸出,我需要解析它以便將它發送到連接表中。 我無法解析 JSON 中的一些數據:標簽、范圍值或正文 我得到 NULL 任何人遇到過這種類型?
DECLARE @json NVARCHAR(MAX)
SET @json = '{
"Id":"712db489",
"label":"kjk",
"ranges":{
"rangeQuestion":null,
"minRange":0,
"maxRange":10,
"rangeValues":[1,2],
"hasMarks":false
},
"labels":[1,2],
"options":[
{
"body":"Yes",
"sequence":1
},
{
"body":"No",
"sequence":2
}
]
}'
SELECT * FROM
OPENJSON ( @json )
WITH (
label nvarchar(250), --ok
maxRange nvarchar(250) '$.ranges.maxRange', --ok
labels nvarchar(250), -- not parsed
rangesValues nvarchar(250) '$.ranges.rangeValues' , -- not parsed
body nvarchar(250) '$.options.body' -- not parsed
)
輸出應該像
minRange maxRange rangeValues
0 10 1
0 10 2
身體序列
是 1
沒有 2
如果嵌套了 3 個級別,可以做什么?
DECLARE @json NVARCHAR(MAX)
SET @json = '{
"Id":"712db489",
"label":"kjk",
"ranges":{
"rangeQuestion":null,
"minRange":0,
"maxRange":10,
"rangeValues": [
{
"rangeValue": 1,
"otherValue": 10
},
{
"rangeValue": 2,
"otherValue": 20
}
],
"hasMarks":false
},
"labels":[1,2],
"options":[
{
"body":"Yes",
"sequence":1
},
{
"body":"No",
"sequence":2
}
]
}'
SELECT r.minRange,
r.maxRange,
rV.[value] AS rangeValue
FROM OPENJSON (@json, '$.ranges')
WITH (minRange int,
maxRange int,
rangeValues nvarchar(MAX)
AS JSON) r
CROSS APPLY OPENJSON (r.rangeValues) rV;
似乎,從評論中的討論來看,您真正想要的是:
SELECT r.minRange,
r.maxRange,
rV.[value] AS rangeValue
FROM OPENJSON (@json, '$.ranges')
WITH (minRange int,
maxRange int,
rangeValues nvarchar(MAX) AS JSON) r
CROSS APPLY OPENJSON (r.rangeValues) rV;
SELECT *
FROM OPENJSON (@json,'$.options')
WITH (body varchar(3),
sequence int) o;
我解決的第二個問題
DECLARE @json NVARCHAR(MAX)
SET @json = '{
"Id":"712db489",
"label":"kjk",
"ranges":{
"rangeQuestion":null,
"minRange":0,
"maxRange":10,
"rangeValues": [
{
"rangeValue": 1,
"otherValue": 10
},
{
"rangeValue": 2,
"otherValue": 20
}
],
"hasMarks":false
},
"labels":[1,2],
"options":[
{
"body":"Yes",
"sequence":1
},
{
"body":"No",
"sequence":2
}
]
}'
SELECT ranges.minRange as minRange,
ranges.maxRange as maxRange,
rangeValues.rangeValue AS rangeValue
FROM OPENJSON (@json, '$.ranges')
WITH (minRange int,
maxRange int,
rangeValues nvarchar(MAX) AS JSON
) as ranges
CROSS APPLY OPENJSON (ranges.rangeValues)
with (
rangeValue int ,
otherValue int
)as rangeValues;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.