使用巢狀的 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 |