共用方式為


使用 AUTO 模式自動格式化 JSON 輸出

適用於: SQL Server 2016(13.x)和更新版本,Azure SQL DatabaseAzure SQL 受控實例Azure Synapse Analytics(僅無伺服器 SQL 資源集區)在 Microsoft Fabric 中的 SQL 分析端點在 Microsoft Fabric 中的 Warehouse

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

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

替代方法是使用 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 Database Engine 中的 JSON

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