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
可用于控制 JSON_OBJECT 函数在 value_expressio 为 NULL
时的行为。 在生成 JSON 键值时,选项 NULL ON NULL
将 SQL NULL
值转换为 JSON NUL 值。 如果值为 ABSENT ON NULL
,选项 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
函数按照这篇FOR JSON
文章中描述的方式在 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)
Result
{"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;
Result
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"} |