使用嵌套的 JSON 子数组
JSON 可能具有内部数组的复杂结构。在此示例中,我们有订单数组,其中包含 OrderItems 的嵌套子数组。
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00",
"Items":[{"Price":11.99,"Quantity":1},{"Price":12.99,"Quantity":5}]},
{"Number":"SO43661","Date":"2011-06-01T00:00:00",
"Items":[{"Price":21.99,"Quantity":3},{"Price":22.99,"Quantity":2},{"Price":23.99,"Quantity":2}]}
]'
我们可以使用 OPENJSON 解析根级别属性,该属性将返回 Items 数组 AS JSON 片段。然后我们可以在 Items 数组上再次应用 OPENJSON 并打开内部 JSON 表。第一级表和内部表将像标准表之间的 JOIN 一样连接:
SELECT *
FROM
OPENJSON (@json)
WITH ( Number varchar(200), Date datetime,
Items nvarchar(max) AS JSON )
CROSS APPLY
OPENJSON (Items)
WITH ( Price float, Quantity int)
结果:
数 | 日期 | 项目 | 价钱 | 数量 |
---|---|---|---|---|
SO43659 |
2011-05-31 00:00:00.000 | [{ 价格:11.99, 数量:1},{ 价格:12.99, 数量:5}] | 11.99 | 1 |
SO43659 |
2011-05-31 00:00:00.000 | [{ 价格:11.99, 数量:1},{ 价格:12.99, 数量:5}] | 12.99 | 五 |
SO43661 |
2011-06-01 00:00:00.000 | [{ 价格:21.99, 数量:3},{ 价格:22.99, 数量:2},{ 价格:23.99, 数量:2}] | 21.99 | 3 |
SO43661 |
2011-06-01 00:00:00.000 | [{ 价格:21.99, 数量:3},{ 价格:22.99, 数量:2},{ 价格:23.99, 数量:2}] | 22.99 | 2 |
SO43661 |
2011-06-01 00:00:00.000 | [{ 价格:21.99, 数量:3},{ 价格:22.99, 数量:2},{ 价格:23.99, 数量:2}] | 23.99 | 2 |