使用 AUTO 模式自動格式化 JSON 輸出 (SQL Server)

適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics (僅無伺服器 SQL 集區)

若要根據 SELECT 陳述式之結構自動格式化 FOR JSON 子句的輸出,請指定 AUTO 選項。

當您指定 AUTO 選項時,會根據 SELECT 清單中的資料行順序和其來源資料表自動決定 JSON 輸出格式。 您無法變更此格式。

替代方法是使用 PATH 選項來維護輸出的控制權。

使用 FOR JSON AUTO 選項的查詢必須具有 FROM 子句。

以下是 FOR JSON 子句搭配 AUTO 選項的一些範例。 Azure Data Studio 是適合 JSON 查詢的建議查詢編輯器,因為此編輯器會自動格式化 JSON 結果 (如本文所示),而不是顯示一般字串。

範例

範例 1

查詢

如果查詢只參考一個資料表,FOR JSON AUTO 子句的結果會類似於 FOR JSON PATH 的結果。 在此情況下,FOR JSON AUTO 不會建立巢狀物件。 唯一的差別在於 FOR JSON AUTO 會輸出以點分隔的別名 (例如,下列範例中的 Info.MiddleName) 作為含點的索引鍵,而不是巢狀物件。

SELECT TOP 5   
       BusinessEntityID As Id,  
       FirstName, LastName,  
       Title As 'Info.Title',  
       MiddleName As 'Info.MiddleName'  
   FROM Person.Person  
   FOR JSON AUTO  

結果

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "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.",
    "Info.MiddleName": "A"
}]

範例 2

查詢

聯結資料表時,第一個資料表中的資料行會產生為根物件的屬性。 第二個資料表中的資料行則會產生為巢狀物件的屬性。 第二個資料表的資料表名稱或別名 (例如,下列範例中的 D) 可作為巢狀陣列的名稱。

SELECT TOP 2 SalesOrderNumber,  
        OrderDate,  
        UnitPrice,  
        OrderQty  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON AUTO   

結果

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

範例 3

查詢
您可以將 FOR JSON PATH 子查詢巢狀於 SELECT 陳述式,而不是使用 FOR JSON AUTO,如下列範例所示。 此範例所輸出的結果與上述範例相同。

SELECT TOP 2  
    SalesOrderNumber,  
    OrderDate,  
    (SELECT UnitPrice, OrderQty  
      FROM Sales.SalesOrderDetail AS D  
      WHERE H.SalesOrderID = D.SalesOrderID  
     FOR JSON PATH) AS D  
FROM Sales.SalesOrderHeader AS H  
FOR JSON PATH  

結果

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

深入了解 SQL Server 和 Azure SQL Database 中的 JSON

Microsoft 影片

如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片:

另請參閱

FOR 子句 (Transact-SQL)