我具有以下HTTP请求数组,格式为JSON
:
[
{
"Code":"856956645",
"Type":"Colet",
"MeasuredWeight":0.0,
"VolumetricWeight":0.0,
"ConfirmationName":null,
"Observation":" 100 DE SFATURI OASELE",
"ResponseCode":null,
"Event":
[
{
"Date":"2018-11-16T16:22:29.397",
"EventId":73,
"Description":"Ridicare din comanda client",
"LocalityName":"BUCURESTI"
},
{
"Date":"2018-11-17T08:55:06.14",
"EventId":5,
"Description":"Spre destinatar ",
"LocalityName":"BUCURESTI"
}
]
}
]
如何在第二组值中提取Description
元素的值。我尝试过使用OPENJSON
,但我做不到:
SELECT *
FROM OPENJSON(@json)
WITH (
Description nvarchar(100) '$.Event.Description'
);
答案 0 :(得分:0)
尝试嵌套。也不确定为什么您的尝试没有成功;除了玩耍之外,OPENJSON
的用途还不多,但是,这可行:
SELECT J.Code, J.[Type], E.[Description]
FROM OPENJSON(@json)
WITH (Code bigint '$.Code',
[Type] varchar(10) '$.Type',
[Event] nvarchar(MAX) AS JSON) J
CROSS APPLY OPENJSON([Event])
WITH ([Description] varchar(100) '$.Description',
EventID int '$.EventId') E
WHERE E.EventID = 5;
编辑:弄清为什么您的尝试不起作用的原因。您拥有的JSON在Event
节点中有一个新的JSON对象,它们不仅仅是属性,例如在文档的第二个示例here中。实体被包裹在进一步的括号([]
)中,而不仅仅是括号({}
),因此,为什么必须再次将下一层解析为单独的JSON对象。