FOR JSON
句の出力を完全に制御するには、PATH
オプションを指定します。
PATH
モードでは、ラッパー オブジェクトを作成し、複雑なプロパティを入れ子にすることができます。 結果は JSON オブジェクトの配列として書式設定されます。
別の方法として、 AUTO
オプションを使用して、 SELECT
ステートメントの構造に基づいて出力を自動的に書式設定することもできます。
-
AUTO
オプションの詳細については、「AUTO モードで JSON 出力を自動的に書式設定する」を参照してください。 - 両方のオプションの概要については、「 FOR JSON を使用してクエリ結果を JSON として書式設定する」を参照してください。
FOR JSON
オプションを使用した PATH
句の例をいくつか次に示します。 次の例に示すように、ドット区切りの列名を使用するか、入れ子になったクエリを使用して、入れ子になった結果を書式設定します。 既定では、null 値は出力 FOR JSON
含まれません。
Azure Data Studio は、フラット文字列を表示するのではなく、(この記事に示されているように) JSON の結果を自動的に書式設定するので、JSON クエリ用に推奨されるクエリ エディターです。
例: ドット区切りの列名
次のクエリは、AdventureWorks Person
テーブルの最初の 5 行を JSON として書式設定します。
FOR JSON PATH
句では、列の別名または列名を使用して、JSON 出力のキー名を決定します。 エイリアスにドットが含まれている場合、 PATH
オプションは入れ子になったオブジェクトを作成します。
Query
SELECT TOP 5
BusinessEntityID As Id,
FirstName, LastName,
Title As 'Info.Title',
MiddleName As 'Info.MiddleName'
FROM Person.Person
FOR JSON PATH
Result
[{
"Id": 1,
"FirstName": "Ken",
"LastName": "Sanchez",
"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.",
"MiddleName": "A"
}
}]
例 - 複数のテーブル
クエリで複数のテーブルを参照すると、FOR JSON PATH
でその別名を使用して各列が入れ子にされます。 次のクエリでは、クエリで結合された (OrderHeader, OrderDetails
) ペアごとに 1 つの JSON オブジェクトが作成されます。
Query
SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',
H.OrderDate AS 'Order.Date',
D.UnitPrice AS 'Product.Price',
D.OrderQty AS 'Product.Quantity'
FROM Sales.SalesOrderHeader H
INNER JOIN Sales.SalesOrderDetail D
ON H.SalesOrderID = D.SalesOrderID
FOR JSON PATH
Result
[{
"Order": {
"Number": "SO43659",
"Date": "2011-05-31T00:00:00"
},
"Product": {
"Price": 2024.9940,
"Quantity": 1
}
}, {
"Order": {
"Number": "SO43659"
},
"Product": {
"Price": 2024.9940
}
}]
SQL データベース エンジンでの JSON の詳細
組み込みの JSON サポートの視覚的な概要については、次のビデオを参照してください。