Pau*_*sta 3 sql-server json sql-server-2016
如何在此 json 文件中获取question_id字段?我试过了,但它返回null。
DECLARE @json NVARCHAR(MAX)
SET @json =
N'{
"solution": "xxxxxxxxxxxxxxxxxxxxx",
"options": [
{
"choice_id": 205073,
"choice": "aaaa"
},
{
"choice_id": 205074,
"choice": "bbbb"
},
{
"choice_id": 205075,
"choice": "cccc"
},
{
"choice_id": 205076,
"choice": "dddd"
}
],
"question_id": 12345
}'
SELECT * FROM
OPENJSON ( @json, '$.options')
WITH (
choice_id varchar(8000) '$.choice_id',
question_id int '$.question_id'
)
Run Code Online (Sandbox Code Playgroud)
结果
你把question_id它当成一个孩子,options而实际上它是一个兄弟姐妹options。
您可以json_value在列列表中使用来获取 的值question_id。
select O.choice_id,
json_value(@json, '$.question_id') as question_id
from openjson(@json, '$.options')
with (
choice_id varchar(8000) '$.choice_id'
) as O;
Run Code Online (Sandbox Code Playgroud)
如果根上有一组对象,则首先需要切碎$以获取每个对象的一行,然后使用 across apply来获取对象。
declare @json nvarchar(max)
set @json = N'
[
{
"solution":"xxxxxxxxxxxxxxxxxxxxx",
"options":[
{
"choice_id":205073,
"choice":"aaaa"
},
{
"choice_id":205074,
"choice":"bbbb"
},
{
"choice_id":205075,
"choice":"cccc"
},
{
"choice_id":205076,
"choice":"dddd"
}
],
"question_id":12345
},
{
"solution":"xxxxxxxxxxxxxxxxxxxxx",
"options":[
{
"choice_id":205073,
"choice":"aaaa"
},
{
"choice_id":205074,
"choice":"bbbb"
},
{
"choice_id":205075,
"choice":"cccc"
},
{
"choice_id":205076,
"choice":"dddd"
}
],
"question_id":22345
}
]'
Run Code Online (Sandbox Code Playgroud)
select O.choice_id,
json_value(@json, '$.question_id') as question_id
from openjson(@json, '$.options')
with (
choice_id varchar(8000) '$.choice_id'
) as O;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |