首页 > 数据库 >SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象

SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象

时间:2024-05-29 11:01:59浏览次数:22  
标签:return name SQLServer2022 OBJECT json JSON NULL 零个

SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造 JSON 对象文本

参考中文官方文档
https://learn.microsoft.com/zh-cn/sql/t-sql/functions/json-object-transact-sql?view=sql-server-ver16

参考英文文官方文档
https://learn.microsoft.com/en-us/sql/t-sql/functions/json-object-transact-sql?view=sql-server-ver16

1、本文内容

  • 语法
  • 参数
  • 返回值
  • 示例

适用于:

  • SQL Server 2022 (16.x)
  • Azure SQL 数据库
  • Azure SQL 托管实例

从零个或多个表达式中构造 JSON 对象文本。

2、语法

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

3、参数

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。

4、返回值

返回 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 输出中转义特殊字符和表示控制字符。

https://learn.microsoft.com/en-us/sql/relational-databases/json/how-for-json-converts-sql-server-data-types-to-json-data-types-sql-server?view=sql-server-ver16

https://learn.microsoft.com/en-us/sql/relational-databases/json/how-for-json-escapes-special-characters-and-control-characters-sql-server?view=sql-server-ver16

5、示例

5.1、返回空 JSON 对象

以下示例返回空 JSON 对象

SELECT JSON_OBJECT() AS return_json;

return_json
-----------------------------------------------
{}

(1 行受影响)

5.2、返回包含两个键的 JSON 对象

以下示例返回包含两个键的 JSON 对象

DECLARE @name NVARCHAR(50) = 'SQLServer2022';  
DECLARE @age INT = 88;    
SELECT JSON_OBJECT('name':@name, 'age':@age) AS return_json;

return_json
-----------------------------------------------------------
{"name":"SQLServer2022","age":88}

(1 行受影响)

5.3、返回包含一个键的 JSON 对象,其中一个键的值为 NULL

以下示例返回包含一个键的 JSON 对象,因为其中一个键的值为 NULL,并且指定了 ABSENT ON NULL 选项。

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

return_json
--------------------------------------------------
{"name":"value"}

(1 行受影响)

以下示例返回包含一个键的 JSON 对象,因为其中一个键的值为 NULL,并且指定了 NULL ON NULL 选项。

-- NULL ON NULL 选项 为默认值
SELECT JSON_OBJECT('name':'value', 'type':NULL) AS return_json;
-- OR 
SELECT JSON_OBJECT('name':'value', 'type':NULL NULL ON NULL) AS return_json;

return_json
----------------------------------------------------
{"name":"value","type":null}

(1 行受影响)

5.4、返回包含两个键的 JSON 对象包括字符串和JSON 数组

以下示例返回包含两个键的 JSON 对象。 一个键包含 JSON 字符串,另一个键包含 JSON 数组。

SELECT JSON_OBJECT('id':1, 'info':JSON_ARRAY('SQLNode1,DBadmin')) AS return_json;

return_json
--------------------------------------------------------
{"id":1,"info":["SQLNode1,DBadmin"]}

(1 行受影响)

5.5、返回包含两个键的 JSON 对象包含字符串和JSON 对象

以下示例返回包含两个键的 JSON 对象。 一个键包含 JSON 字符串,另一个键包含 JSON 对象。

DECLARE @name NVARCHAR(50) = 'NBA Games';  
DECLARE @age INT = 30;  
SELECT JSON_OBJECT('id':'1001', 'info':JSON_OBJECT('name':@name, 'age':@age)) AS return_json;

return_json
-------------------------------------------------------------------
{"id":"1001","info":{"name":"NBA Games","age":30}}

(1 行受影响)

5.6、输入指定为变量或 SQL表达式返回JSON 对象

以下示例返回 JSON 对象,其输入指定为变量或 SQL 表达式。

DECLARE 
  @id_key nvarchar(10) = N'id',
  @id_value nvarchar(64) = NEWID();

SELECT JSON_OBJECT
( 'username':USER_NAME(), 
  @id_key:@id_value, 
  'sid':(SELECT @@SPID),
  'sys_date':(SELECT GETDATE())
) AS return_json;

return_json
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"username":"dbo","id":"7105CD3C-041F-4CEC-AA98-0621F008C3B8","sid":68,"sys_date":"2024-05-29T09:47:01.893"}

(1 行受影响)

5.7、在查询中对每行返回一个 JSON 对象

以下示例在查询中对每行返回一个 JSON 对象。

-- 创建表及插入数据
CREATE TABLE Persons (  
    ID INT PRIMARY KEY,  
    Name NVARCHAR(50),  
    Age INT  
);  
  
INSERT INTO Persons VALUES (1, 'John Doe', 30);  
INSERT INTO Persons VALUES (2, 'Jane Smith', 25);  
-- 查询表数据
SELECT ID,Name,Age FROM Persons;
ID          Name                                               Age
----------- -------------------------------------------------- -----------
1           John Doe                                           30
2           Jane Smith                                         25

(2 行受影响) 
-- Result  
SELECT   
    ID,  
    JSON_OBJECT('name':Name, 'age':Age) AS PersonJson  
FROM Persons;

ID          personJson
----------- ---------------------------------------------------
1           {"name":"John Doe","age":30}
2           {"name":"Jane Smith","age":25}

(2 行受影响)

标签:return,name,SQLServer2022,OBJECT,json,JSON,NULL,零个
From: https://blog.csdn.net/zxrhhm/article/details/139283117

相关文章

  • Python网络爬虫的时候json=就是让你少写个json.dumps()
    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:登录请求地址是这个:二、实现过程这里【甯同学】给了一个提示,如下所示:估计很多小伙伴和我一样会有一个疑问吧,为啥这次要用json=data啊?因为请求头的content-type这里对......
  • XML和JSON的区别
    XML(ExtensibleMarkupLanguage)和JSON(JavaScriptObjectNotation)都是常见的数据交换格式,但它们有以下几点主要区别:1:语法结构:XML是一种基于标签的标记语言,数据包裹在开始标签和结束标签中,如<person><name>John</name><age>30</age></person>。JSON是一......
  • Mybatis-Plus 实现 jsonb类型的数据存取
    1、自定义类型处理器importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.serializer.SerializerFeature;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;importorg.postgresql.util.PGobject;importjava.sql.Calla......
  • notepad++ 将JSON压缩成一行与JSON格式化
    参考文档:https://blog.csdn.net/weixin_43684328/article/details/109528085实际只有两部:第一步: 第二步:  ####################下面是转发参考的内容#######################无需插件,正则替换即可如果json中含有空格不想替换时可以分别替换回车和制表符{"DAT......
  • json-server 快速搭建接口服务 使用教程
    json-server是一款小巧的接口模拟工具,一分钟内就能搭建一套Restful风格的API,尤其适合前端接口测试使用。只需指定一个json文件作为api的数据源即可,使用起来非常方便,30秒入门。进阶操作还支持分页,排序等操作,非常方便!开源地址主页地址:https://www.npmjs.com/package/js......
  • JSON里包含的数组中的值 (List数组或对象)转换出来并读取, 通过 hutool 中的API 方法
    hutool 是一个Java工具包,它提供了很多实用的功能,包括JSON的处理。在 hutool 中,你可以使用 cn.hutool.json.JSONUtil 类来解析和处理JSON数据。如果你想要获取JSON中的数组(JSONArray),并遍历读取其中的值(无论是基本类型还是对象),你可以按照以下步骤操作:首先,确保你的项目......
  • Excel小公式快速拆分json数据
    MongoDB导出了一些json格式数据,其实也可以导出csv,经验来看MongoDB导出时候会有objectId,是一种标识符特征.这次拿到了其他组资源的数据,其中的关键列,便于和组内其他资源兼容.用ExcelLEFT&FIND进行拆分的记录人类生活是虚构泡影我的地球OL服务器会被泪水侵染宕机...吗.......
  • Json差异比较
    json差异比较如何比较两个json的差异代码实现导入依赖<dependency><groupId>cn.xiaoandcai</groupId><artifactId>json-diff</artifactId><!--旧版本可能存在某些缺陷。版本请以maven仓库最版为准。--><versi......
  • GeoJSON数据转shp文件
        利用QGis工具,使用GeoJSON数据转换生成shp文件,用于GeoServer发布shp图层服务。首先准备一份GeoJSON文件,文件格式为“.json”,文件接入如下:详细操作如下:1、启动QGis工具2、从左上角找到按钮“opendatasourcemanager”,点击打开数据源3、选择数据源,显示如下......
  • Http请求携带JSON字符串,报错415
    //使用ajax向后端发送post请求,响应415letjsonObj={"username":"zhangsan","password":"1234"}Vue.createApp({data(){return{message:''}},methods......