JSON_OBJECT (Transact-SQL)

適用対象: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance

0 個以上の式から JSON オブジェクト テキストを構築します。

構文

JSON_OBJECT ( [ <json_key_value> [,...n] ] [ json_null_clause ] )

<json_key_value> ::= json_key_name : value_expression

<json_null_clause> ::=
      NULL ON NULL
    | ABSENT ON NULL

引数

json_key_name

JSON キー名の値を定義する文字式です。

value_expression JSON キーの値を定義する式です。

json_null_clause

value_expression が NULL の場合に、JSON_OBJECT 関数の動作を制御するために使用できます。 オプション NULL ON NULL を使用すると、JSON キー値を生成するときに、SQL NULL 値が JSON NULL 値に変換されます。 値が ABSENT ON NULL の場合、オプション NULL を使用すると、キー全体が省略されます。 このオプションの既定の設定は NULL ON NULL です。

戻り値

nvarchar(max) 型の有効な JSON オブジェクト文字列を返します。

JSON_OBJECT 関数の出力に表示される内容の詳細については、次の記事を参照してください。

例 1

次の例では、空の JSON オブジェクトを返します。

SELECT JSON_OBJECT();

結果

{}

例 2

次の例では、2 つのキーを持つ JSON オブジェクトを返します。

SELECT JSON_OBJECT('name':'value', 'type':1)

結果

{"name":"value","type":1}

例 3

次の例では、いずれかのキーの値が NULL であり、ABSENT ON NULL オプションが指定されているため、1 つのキーを持つ JSON オブジェクトを返します。

SELECT JSON_OBJECT('name':'value', 'type':NULL ABSENT ON NULL)

結果

{"name":"value"}

例 4

次の例では、2 つのキーを持つ JSON オブジェクトを返します。 1 つのキーには JSON 文字列が含まれており、もう 1 つのキーには JSON 配列が含まれています。

SELECT JSON_OBJECT('name':'value', 'type':JSON_ARRAY(1, 2))

結果

{"name":"value","type":[1,2]}

例 5

次の例では、2 つのキーを持つ JSON オブジェクトを返します。 1 つのキーには JSON 文字列が含まれており、もう 1 つのキーには JSON オブジェクトが含まれています。

SELECT JSON_OBJECT('name':'value', 'type':JSON_OBJECT('type_id':1, 'name':'a'))

結果

{"name":"value","type":{"type_id":1,"name":"a"}}

例 6

次の例では、入力が変数または SQL 式として指定されている JSON オブジェクトを返します。

DECLARE @id_key nvarchar(10) = N'id',@id_value nvarchar(64) = NEWID();
SELECT JSON_OBJECT('user_name':USER_NAME(), @id_key:@id_value, 'sid':(SELECT @@SPID))

結果

{"user_name":"dbo","id":"E2CBD8B4-13C1-4D2F-BFF7-E6D722F095FD","sid":63}

例 7

次の例では、クエリの行ごとに、JSON オブジェクトを返します。

SELECT s.session_id, JSON_OBJECT('security_id':s.security_id, 'login':s.login_name, 'status':s.status) as info
FROM sys.dm_exec_sessions AS s
WHERE s.is_user_process = 1;

結果

session_id info
51 {"security_id":"AQYAAAAAAAVQAAAAY/0dmFnai5oioQHh9eNArBIkYd4=","login":"NT SERVICE\\SQLTELEMETRY$SQL22","status":"sleeping"}
52 {"security_id":"AQUAAAAAAAUVAAAAoGXPfnhLm1/nfIdwAMgbAA==","login":WORKGROUP\\sqluser","status":"running"}