適用対象:Sql Server 2016 (13.x) 以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (サーバーレス SQL プールのみ )、Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のハードウェア
SQL データベース
FOR JSON 句を SELECT ステートメントに追加して、クエリ結果を JSON として書式設定するか、SQL Server から JSON としてデータをエクスポートします。
FOR JSON 句を使用して、JSON 出力の書式設定をアプリから SQL Server に委任することによって、クライアント アプリケーションを簡素化します。
Note
Azure Data Studio は、この記事に示されているように JSON の結果を自動的に書式設定するので、JSON クエリ用に推奨されるクエリ エディターです。 SQL Server Management Studio では、書式設定されていない文字列が表示されます。
Fabric Data Warehouse では、FOR JSON はクエリの最後の演算子である必要があるため、サブクエリ内では使用できません。
クエリ結果を書式設定する
FOR JSON 句を使用すると、JSON 出力の構造を明示的に指定したり、SELECT ステートメントの構造によって出力を決定したりできます。
JSON 出力の形式を完全に制御するには、
FOR JSON PATHを使用します。 ラッパー オブジェクトを作成して、複雑なプロパティを入れ子にすることができます。SELECTステートメントの構造に基づいて JSON 出力を自動的に書式設定するには、FOR JSON AUTOを使用します。
SELECT 句とその出力を使用した FOR JSON ステートメントの例を次に示します。
FOR JSON PATH で出力を制御する
PATH モードではドット構文を使用できます。たとえば、ネストした出力を書式設定するには、Item.Price と指定します。
PATH 句で FOR JSON モードを使用するサンプル クエリを以下に示します。 次の例では、ROOT オプションを使用して名前付きのルート要素を指定しています。
FOR JSON PATH に関する詳細情報
詳細と例については、「 PATH モードを使用した入れ子になった JSON 出力の書式設定」を参照してください。
構文と使用方法については、「 SELECT - FOR 句 (Transact-SQL)」を参照してください。
他の JSON 出力オプションを制御する
次の追加オプションを使用して、FOR JSON 句の出力を制御します。
ROOTJSON 出力に最上位の単一要素を追加するには、
ROOTオプションを指定します。 このオプションを指定しないと、JSON 出力にはルート要素がありません。 詳細については、「 ROOT オプションを使用して JSON 出力にルート ノードを追加する」を参照してください。INCLUDE_NULL_VALUESJSON 出力に null 値を含めるには、
INCLUDE_NULL_VALUESオプションを指定します。 このオプションを指定しないと、出力にはクエリ結果のNULL値に対する JSON プロパティは含まれません。 詳細については、「JSON に Null 値を含める - INCLUDE_NULL_VALUES オプション」をご覧ください。WITHOUT_ARRAY_WRAPPER既定で
FOR JSON句の JSON 出力を囲む角かっこを削除するには、WITHOUT_ARRAY_WRAPPERオプションを指定します。 このオプションを使用して、1 行の結果からの出力として単一の JSON オブジェクトを生成します。 このオプションを指定しない場合、JSON 出力は配列としてフォーマットされるため、出力は角かっこで囲まれます。 詳細については、「WITHOUT_ARRAY_WRAPPER オプションを使用して JSON から角かっこを削除する」を参照してください。
FOR JSON 句の出力
FOR JSON 句の出力には、次の特徴があります。
結果セットには 1 つの列が含まれます。
- 小さな結果セットには 1 つの行を含めることができます。
- 大きな結果セットでは、長い JSON 文字列が複数行に分割されます。
出力設定が結果をグリッドに表示の場合、SQL Server Management Studio (SSMS) は既定で結果を単一行に連結します。 SSMS のステータス バーに、実際の行数が表示されます。
他のクライアント アプリケーションでは、複数の行の内容を連結することによって長い結果を単一の有効な JSON 文字列に結合し直すにはコードが必要になることがあります。 C# アプリケーションでのこのコードの例については、「C# クライアント アプリで FOR JSON 出力を使用する」をご覧ください。
結果は JSON オブジェクトの配列として書式設定されます。
JSON 配列の要素の数は、(FOR JSON 句が適用される前の) SELECT ステートメントの結果の行数と同じです。
(FOR JSON 句が適用される前の) SELECT ステートメントの結果の各行は、配列内の個別の JSON オブジェクトになります。
(FOR JSON 句が適用される前の) SELECT ステートメントの結果の各列は、JSON オブジェクトのプロパティになります。
列の名前とその値は、JSON の構文に従ってエスケープされます。 詳細については、「 FOR JSON で特殊文字と制御文字をエスケープする方法」を参照してください。
Example
FOR JSON 句による JSON 出力の書式設定の例を次に示します。
クエリ結果
| A | B | C | D |
|---|---|---|---|
| 10 | 11 | 12 | X |
| 20 | 21 | 22 | Y |
| 30 | 31 | 32 | Z |
JSON 出力
[{
"A": 10,
"B": 11,
"C": 12,
"D": "X"
}, {
"A": 20,
"B": 21,
"C": 22,
"D": "Y"
}, {
"A": 30,
"B": 31,
"C": 32,
"D": "Z"
}]