FOR JSON
ステートメントの構造に基づいてSELECT
句の出力を自動的に書式設定するには、AUTO
オプションを指定します。
AUTO
オプションを指定すると、JSON 出力の形式は、SELECT リストとそのソース テーブル内の列の順序に基づいて自動的に決定されます。 この形式を変更することはできません。
別の方法は、 PATH
オプションを使用して出力の制御を維持することです。
-
PATH
オプションの詳細については、「PATH モードを使用した入れ子になった JSON 出力の書式設定」を参照してください。 - 両方のオプションの概要については、「 FOR JSON を使用してクエリ結果を JSON として書式設定する」を参照してください。
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 サポートの視覚的な概要については、次のビデオを参照してください。