以 PATH 模式格式化巢狀的 JSON 輸出 (SQL Server)
適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics (僅無伺服器 SQL 集區)
若要保有 FOR JSON 子句輸出的完整控制權,請指定 PATH 選項。
PATH 模式讓您建立包裝函式物件和巢狀複雜屬性。 結果會格式化為 JSON 物件陣列。
替代方法是使用 AUTO 選項,以根據 SELECT 陳述式的結構自動格式化輸出。
- 如需 AUTO 選項的詳細資訊,請參閱使用 AUTO 模式自動格式化 JSON 輸出。
- 如需這兩個選項的概觀,請參閱使用 FOR JSON 將查詢結果格式化為 JSON。
以下是 FOR JSON 子句搭配 PATH 選項的一些範例。 使用點分隔資料行名稱,或使用巢狀查詢格式化巢狀結果,如下例所示。 根據預設,null 值不會包含在 FOR JSON輸出中。 Azure Data Studio 是 JSON 查詢的建議使用查詢編輯器,因為此編輯器會自動格式化 JSON 結果 (如本文所示),而非顯示一般字串。
範例 - 點分隔資料行名稱
下列查詢會將 AdventureWorks Person
資料表中的前五個資料列格式化為 JSON。
FOR JSON PATH 子句會使用資料行別名或資料行名稱判斷 JSON 輸出中的索引鍵名稱。 如果別名包含點,PATH 選項會建立巢狀物件。
查詢
SELECT TOP 5
BusinessEntityID As Id,
FirstName, LastName,
Title As 'Info.Title',
MiddleName As 'Info.MiddleName'
FROM Person.Person
FOR JSON PATH
結果
[{
"Id": 1,
"FirstName": "Ken",
"LastName": "Sanchez",
"Info": {
"MiddleName": "J"
}
}, {
"Id": 2,
"FirstName": "Terri",
"LastName": "Duffy",
"Info": {
"MiddleName": "Lee"
}
}, {
"Id": 3,
"FirstName": "Roberto",
"LastName": "Tamburello"
}, {
"Id": 4,
"FirstName": "Rob",
"LastName": "Walters"
}, {
"Id": 5,
"FirstName": "Gail",
"LastName": "Erickson",
"Info": {
"Title": "Ms.",
"MiddleName": "A"
}
}]
範例 - 多份資料表
如果在查詢中參考多個資料表,則 FOR JSON PATH 會使用別名來巢狀處理每個資料行。 下列查詢會為在查詢中聯結的每組 (OrderHeader, OrderDetails) 建立一個 JSON 物件。
查詢
SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',
H.OrderDate AS 'Order.Date',
D.UnitPrice AS 'Product.Price',
D.OrderQty AS 'Product.Quantity'
FROM Sales.SalesOrderHeader H
INNER JOIN Sales.SalesOrderDetail D
ON H.SalesOrderID = D.SalesOrderID
FOR JSON PATH
結果
[{
"Order": {
"Number": "SO43659",
"Date": "2011-05-31T00:00:00"
},
"Product": {
"Price": 2024.9940,
"Quantity": 1
}
}, {
"Order": {
"Number": "SO43659"
},
"Product": {
"Price": 2024.9940
}
}]
深入了解 SQL Server 和 Azure SQL Database 中的 JSON
Microsoft 影片
如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片: