我正在尝试解析一个包含 X 个相同 JSON 节点(连接在一起)的字符串:
declare @jsonData varchar(max) =
'{
"data":{
"identity":1,
"elementValue": "300833b2ddd9014000000000"
},
"timestamp":"2023-04-25T00:56:57.891+0000"
}
{
"data":{
"identity":2,
"elementValue": "ad72120643eb1fb1867c005c"
},
"timestamp":"2023-04-25T00:56:57.898+000"
}'
我想解析字符串并返回“数据”节点内的值:
身份 | 元素值 |
---|---|
1 | 300833b2ddd9014000000000 |
2 | ad72120643eb1fb1867c005c |
我相信使用 OPENJSON() 可以实现这一点,但我对 CROSS APPLY 语法感到很困惑——如能得到任何帮助,非常感谢!
您的 JSON 实际上是无效的。它没有周围的数组括号,对象之间也没有逗号。我假设您的实际数据是正确的。
这非常简单,使用单个
OPENJSON
将数组分解为值,并使用路径语法来指定如何检索每个属性。但如果您确实想要使用
cross apply
或有其他更高级别的元素需要检索,那么您可以将一个元素的结果输入OPENJSON
到下一个元素中。您需要指定as json
以整个对象或数组的形式检索属性,而不对其进行解析。db<>小提琴