AUTO モードで JSON 出力を自動的に書式設定する

適用対象:Sql Server 2016 (13.x) 以降のバージョンAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (サーバーレス SQL プールのみ )、Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のハードウェアSQL データベース

FOR JSON ステートメントの構造に基づいてSELECT句の出力を自動的に書式設定するには、AUTO オプションを指定します。

AUTO オプションを指定すると、JSON 出力の形式は、SELECT リストとそのソース テーブル内の列の順序に基づいて自動的に決定されます。 この形式を変更することはできません。

出力を制御する場合は、 PATH オプションを使用します。

FOR JSON AUTO オプションを使用するクエリには、FROM句が必要です。

FOR JSON オプションを使用した AUTO 句の例をいくつか次に示します。

注

Visual Studio Code 用の MSSQL 拡張機能では、書式設定されていない文字列を表示する代わりに、JSON の結果を自動的に書式設定できます (この記事を参照)。

Examples

この記事のコードサンプルは、Azure Data SQL Samples Repository GitHub repositoryからダウンロードできるAdventureWorks2025またはAdventureWorksDW2025サンプルデータベースを使用しています。

A. 1 つのテーブルから 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"
}]

B: 結合テーブルの JSON の書式設定

テーブルを結合すると、最初のテーブル内の列はルート オブジェクトのプロパティとして生成されます。 2 番目のテーブル内の列は、入れ子になったオブジェクトのプロパティとして生成されます。 2 番目のテーブルのテーブル名または別名 (次の例では 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 サポートの視覚的な概要については、 NoSQL とリレーショナルワールドの間のブリッジとしての JSON を参照してください。