共用方式為


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

適用於:SQL Server 2016 (13.x)及以後版本Azure SQL 資料庫Azure SQL Managed InstanceAzure Synapse Analytics(僅限 serverless SQL pool 使用)Microsoft Fabric 中的 SQL Analytics 端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

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

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

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

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

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

Examples

範例 1

Query

當查詢只參考一個數據表時,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  

Result

[{
    "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

Query

聯結資料表時,第一個資料表中的資料行會產生為根物件的屬性。 第二個資料表中的欄位將會作為巢狀物件的屬性生成。 第二個資料表的資料表名稱或別名 (例如,下列範例中的 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   

Result

[{
    "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

Query
您可以將子查詢 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  

Result

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

深入瞭解 SQL Database Engine 中的 JSON

如需內建 JSON 支援的視覺效果簡介,請參閱下列影片: