JSON_OBJECT (Transact-SQL)
適用於:SQL Server 2022 (16.x) Azure SQL 資料庫 Azure 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
函式輸出中所看到項目的詳細資訊,請查看下列文章:
FOR JSON 如何將 SQL Server 資料類型轉換為 JSON 資料類型 (SQL Server)
JSON_OBJECT
函式使用本FOR JSON
文中描述的規則,在 JSON 物件輸出中,將 SQL 資料類型轉換為 JSON 類型。FOR JSON 如何逸出特殊字元和控制字元 (SQL Server)
JSON_OBJECT
函式會逸出特殊字元,並在 JSON 輸出中代表控制字元,如本FOR JSON
文中所描述。
範例
範例 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"} |