以自動模式格式化 JSON 輸出

適用於:SQL Server 2016 (13.x)及以後版本Azure SQL 資料庫Azure SQL 受控執行個體Azure 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 選項範例。

備註

Visual Studio Code 的 MSSQL 擴充功能可以自動格式化 JSON 結果(如本文所示),而非顯示未格式化的字串。

Examples

本文中的程式碼範例使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 Azure Data SQL 範例存放庫 GitHub 存放庫下載這些資料庫。

A。 從單一資料表格式化 JSON

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

B. 為連接資料表格式化 JSON

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

SELECT TOP 2 SalesOrderNumber,
             OrderDate,
             UnitPrice,
             OrderQty
FROM Sales.SalesOrderHeader AS H
     INNER JOIN Sales.SalesOrderDetail AS 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
    }]
}]

C. 使用 FOR JSON PATH 來匹配 AUTO 輸出

你可以不使用FOR JSON AUTO,而是將FOR JSON PATH子查詢巢狀在SELECT語句中,如下範例所示。 此範例所輸出的結果與上述範例相同。

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 資料庫引擎 中的 JSON

若想視覺化介紹內建 JSON 支援,請參考 JSON 作為 NoSQL 與關聯式世界之間的橋樑。