我正试图为嵌套数组设置openjson函数的路径,但它不起作用。尝试了不同的变化和例子/资源,我在网上找到,但仍然无法找出它。
有什么想法吗?
编辑:
我知道如何使用crossapply和其他方法来实现这一点。我的问题是,如果可能的话,如何专门使用openjson函数的path参数来实现这一点。
这是我的密码:
DECLARE @json NVARCHAR(MAX);
SET @json = '
{
"orders": [
{
"id":"1",
"date":"7/4/2020",
"orderlines": [
{"id": "1", "amount": 100},
{"id": "2", "amount": 200}
]
},
{
"id":"2",
"date":"7/4/2020",
"orderlines": [
{"id": "3", "amount": 300},
{"id": "4", "amount": 400}
]
}
]
}
'
-- None of these return results. How do I specify the path to the "orderlines" array?
SELECT * FROM OPENJSON(@json,'$.orderlines');
SELECT * FROM OPENJSON(@json,'$.orderlines[1]');
SELECT * FROM OPENJSON(@json,'$.orders.orderlines');
SELECT * FROM OPENJSON(@json,'$.orders.orderlines[1]');
-- This works:
SELECT * FROM OPENJSON(@json,'$.orders');
3条答案
按热度按时间cwtwac6a1#
您可以使用with并将名称放在内部值上,还可以使用cross apply在另一个openjson中使用它们。现在可以将所有内部对象放在一起。
在这里了解更多。
如果需要获取数组中的特定项:
zaq34kh62#
您可以尝试以下操作:
请看这里的小提琴。
ryoqjall3#
为了让其他可能看到这一点的人明白,伊曼·卡泽米的回答部分是他所写的以下内容:
我忽略了指定订单数组的索引。
再次感谢伊曼。