Share via


JSON_OBJECT (Transact-SQL)

適用於:SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL 受控執行個體

從零個或多個運算式建構 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 值。 如果值為 NULL,則 ABSENT ON NULL 選項會省略整個索引鍵。 這個選項的預設值是 NULL ON NULL

傳回值

傳回 nvarchar(max) 類型的有效 JSON 物件字串。

如需您在 JSON_OBJECT 函式輸出中所看到項目的詳細資訊,請查看下列文章:

範例

範例 1

下列範例會傳回空白 JSON 物件。

SELECT JSON_OBJECT();

結果

{}

範例 2

下列範例會傳回具有兩個索引鍵的 JSON 物件。

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

結果

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

範例 3

下列範例會傳回具有一個索引鍵的 JSON 物件,因為其中一個索引鍵的值是 NULL,並且指定了 ABSENT ON NULL 選項。

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

結果

{"name":"value"}

範例 4

下列範例會傳回具有兩個索引鍵的 JSON 物件。 一個索引鍵包含 JSON 字串,另一個索引鍵則包含 JSON 陣列。

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

結果

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

範例 5

下列範例會傳回具有兩個索引鍵的 JSON 物件。 一個索引鍵包含 JSON 字串,另一個索引鍵則包含 JSON 物件。

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

結果

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

範例 6

下列範例會傳回 JSON 物件,其中包含指定為變數或 SQL 運算式的輸入。

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"}