サーチ…


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結果を生成します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow