次の方法で共有


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

適用対象:SQL Server 2016 (13.x) 以降のバージョンAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (サーバーレス SQL プールのみ)Microsoft Fabric の SQL 分析エンドポイント、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

Example 1

Query

クエリが 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  

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"
}]

Example 2

Query

テーブルを結合すると、最初のテーブル内の列はルート オブジェクトのプロパティとして生成されます。 2 番目のテーブル内の列は、入れ子になったオブジェクトのプロパティとして生成されます。 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   

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
    }]
}]

Example 3

Query
FOR JSON AUTO を使用せずに、次の例のように SELECT ステートメントに FOR JSON PATH サブキーを入れ子にすることができます。 この例では、前の例と同じ結果が出力されます。

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 データベース エンジンでの JSON の詳細

組み込みの JSON サポートの視覚的な概要については、次のビデオを参照してください。