适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 预览版中的 SQL 数据库
语法 JSON_OBJECT 从零个或多个表达式构造 JSON 对象文本。
Syntax
JSON_OBJECT ( [ <json_key_value> [ , ...n ] ] [ json_null_clause ] [ RETURNING json ] )
<json_key_value> ::= json_key_name : value_expression
<json_null_clause> ::=
NULL ON NULL
| ABSENT ON NULL
Arguments
json_key_name
定义 JSON 键名称值的字符表达式。
value_expression
定义 JSON 键值的表达式。
json_null_clause
可用于控制value_expressionNULL时函数的行为JSON_OBJECT。 生成 JSON 键值时,该选项 NULL ON NULL 会将 SQL NULL 值转换为 JSON null 值。 如果值为 ABSENT ON NULL,选项 NULL 将省略整个键。 此选项的默认设置为 NULL ON NULL。
返回值
返回 nvarchar(max) 类型的有效 JSON 对象字符串。 如果包含该 RETURNING json 选项,则 JSON 对象将作为 json 类型返回。
若要了解 JSON_OBJECT 函数的输出内容,请查看以下文章:
| Article | Description |
|---|---|
| FOR JSON 如何将 SQL Server 数据类型转换为 JSON 数据类型 |
JSON_OBJECT 函数使用这篇 FOR JSON 文章中描述的规则在 JSON 输出中将 SQL 数据类型转换为 JSON 类型。 |
| FOR JSON 如何转义特殊字符和控制字符 |
JSON_OBJECT 函数按照这篇 FOR JSON 文章中描述的方式在 JSON 输出中转义特殊字符和表示控制字符。 |
Examples
示例 1
以下示例返回空 JSON 对象。
SELECT JSON_OBJECT();
Result
{}
示例 2
以下示例返回包含两个键的 JSON 对象。
SELECT JSON_OBJECT('name':'value', 'type':1);
Result
{"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));
Result
{"name":"value","type":[1,2]}
示例 5
以下示例返回包含两个键的 JSON 对象。 一个键包含 JSON 字符串,另一个键包含 JSON 对象。
SELECT JSON_OBJECT('name':'value', 'type':JSON_OBJECT('type_id':1, 'name':'a'));
Result
{"name":"value","type":{"type_id":1,"name":"a"}}
示例 6
以下示例返回 JSON 对象,其输入指定为变量或 SQL 表达式。
DECLARE @id_key AS NVARCHAR (10) = N'id', @id_value AS NVARCHAR (64) = NEWID();
SELECT JSON_OBJECT('user_name':USER_NAME(), @id_key:@id_value, 'sid':(SELECT @@SPID));
Result
{"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"} |
示例 8
以下示例将 JSON 对象作为 json 类型返回。
SELECT JSON_OBJECT("a":1 RETURNING json);
Result
{"a":1}