Microsoft SQL Server
JSON用
サーチ…
JSONパス用
SELECTクエリの結果をJSONテキストとしてフォーマットします。 FOR JSON PATH句がクエリの後に追加されます:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
列名はJSONのキーとして使用され、セル値はJSON値として生成されます。クエリの結果は、JSONオブジェクトの配列になります。
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
principal_id列のNULL値は無視されます(生成されません)。
列別名を含むJSON PATH用
FOR JSON PATHを使用すると、列別名を使用して出力JSONの書式を制御できます。
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
列エイリアスがキー名として使用されます。ドットで区切られた列別名(data.nameとdata.type)は、ネストされたオブジェクトとして生成されます。 2つの列がドット表記で同じプレフィックスを持つ場合、それらは単一のオブジェクト(この例ではデータ)でグループ化されます。
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
FOR配列のラッパーのないJSON句(出力の単一オブジェクト)
WITHOUT_ARRAY_WRAPPERオプションを使用すると、配列の代わりに単一のオブジェクトを生成できます。単一行/オブジェクトを返すことがわかっている場合は、このオプションを使用します。
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
この場合、単一のオブジェクトが返されます:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
FOR JSON節はセル内のNULL値を無視します。 NULL値を含むセルに「キー」:NULLペアを生成する場合は、クエリにINCLUDE_NULL_VALUESオプションを追加します。
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
principal_id列のNULL値が生成されます。
[
{"object_id":3,"name":"sysrscols","type":"S ","principal_id":null},
{"object_id":5,"name":"sysrowsets","type":"S ","principal_id":null},
{"object_id":6,"name":"sysclones","type":"S ","principal_id":null}
]
ROOTオブジェクトによる結果のラッピング
返されたJSON配列を指定されたキーを持つ追加のルートオブジェクトにラップします:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
クエリの結果は、JSONオブジェクトの配列がラッパーオブジェクト内にあります。
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
JSON AUTO用
2番目のテーブルの値をJSONオブジェクトのネストされたサブアレイとして自動的にネストします。
SELECT top 5 o.object_id, o.name, c.column_id, c.name
FROM sys.objects o
JOIN sys.columns c ON o.object_id = c.object_id
FOR JSON AUTO
クエリの結果は、JSONオブジェクトの配列になります。
[
{
"object_id":3,
"name":"sysrscols",
"c":[
{"column_id":12,"name":"bitpos"},
{"column_id":6,"name":"cid"}
]
},
{
"object_id":5,
"name":"sysrowsets",
"c":[
{"column_id":13,"name":"colguid"},
{"column_id":3,"name":"hbcolid"},
{"column_id":8,"name":"maxinrowlen"}
]
}
]
カスタムネストJSON構造の作成
FOR JSON PATHまたはFOR JSON AUTOを使用して作成できない複雑なJSON構造が必要な場合は、FOR JSONサブクエリを列式として配置することでJSON出力をカスタマイズできます。
SELECT top 5 o.object_id, o.name,
(SELECT column_id, c.name
FROM sys.columns c WHERE o.object_id = c.object_id
FOR JSON PATH) as columns,
(SELECT parameter_id, name
FROM sys.parameters p WHERE o.object_id = p.object_id
FOR JSON PATH) as parameters
FROM sys.objects o
FOR JSON PATH
各サブクエリは、メインのJSONコンテンツに含まれるJSON結果を生成します。