|
|
51CTO旗下网站
|
|
移动端

将数据库SQL查询结果直接转为JSON

JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

作者:网云技术来源:快资讯|2019-01-03 15:40

JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

SQL与Json

SQLServer对从2016开始添加了对Json数据的支持,我们可以很轻松的将查询的数据通过SQL语句直接转成Json格式,这对我们存储和交互数据提供了一个很好的途径。

今天我们就说说在SQLServer中如何将查询结果生成Json文本。

测试数据准备

为了测试效果,我们先准备测试数据,这里做一个简单的销售表:

  1. declare @sale table(  
  2.  FName nvarchar(50),  
  3.  FDistrict nvarchar(50),  
  4.  FAmount decimal(28,10)  
  5. ); 
  6.  
  7. insert into @sale  
  8. values  
  9. ('张三','北京',20000),  
  10. ('张三','上海',50000),  
  11. ('张三','深圳',40000),  
  12. ('张三','广州',30000),  
  13. ('李四','北京',30000),  
  14. ('李四','上海',50000),  
  15. ('李四','深圳',40000),  
  16. ('李四','广州',10000);  
 

演示数据

神奇的for json auto子句

在查询的from子句中加上 for json auto,查询结果就会自动转成json文本,这是最简单的一种转换方式。

  1. select *from @sale for json auto 

查询的结果就是json文本了。

 

查询结果自动转成Json

把Json抓取出来,效果如下:

 

自动导出的Json文本

是否感觉很神奇,如果您觉得SQLServer对导出Json的支持仅仅如此,那您就太小看微软了,下面我们再说说更强大的导出功能。

神奇的for json path子句

见识了神奇的for json auto子句,我们在看看另一个神奇的for json path子句,该子句使用列别名或列名来确定 JSON 输出中的键名称。

比如我们把“姓名”作为一个顶层节点,把区域和销售额设置一个上级节点“销售情况”:

  1. select FName as 姓名,  
  2.  FDistrict as '销售情况.区域',  
  3.  FAmount as '销售情况.金额'  
  4. from @sale   
  5. for json path 

查询的结果也是Json文本:

 

查询结果自动转成Json

把Json抓取出来,效果如下:

 

自动导出的Json文本

有没有发现什么不同?“销售情况.区域”、“销售情况.金额”中的点号,自动将“销售情况”作为了上级节点,“区域”和“金额”作为了子节点。

神奇的ROOT选项

对Json比较熟悉的朋友会发现,for json auto和for json path导出的Json直接是数组,每条记录就是一个数组元素,缺少了根节点,如果我们想要给Json加一个根节点要怎么做呢?

SQLServer提供了Root选项来完成根节点的添加工作:

  1. select FName as 姓名,  
  2.  FDistrict as '销售情况.区域',  
  3.  FAmount as '销售情况.金额'  
  4. from @sale   
  5. for json path, root('业务信息'); 

查询的结果仍然是Json文本:

 

查询结果自动转成Json

把Json抓取出来,效果如下:

 

自动导出的Json文本

可以看到Json添加了根节点“业务信息”。

希望对您有所帮助!

【编辑推荐】

  1. 你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
  2. 数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据
  3. 简单实现MySQL数据库的日志审计
  4. MySQL数据库设计总结
  5. 数据库优化渐进的过程,这些你都知道?
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+白菜送彩金大全

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

216人订阅学习

Java EE速成指南

Java EE速成指南

掌握Java核心
共30章 | 51CTO王波

83人订阅学习

Mysql DBA修炼之路

Mysql DBA修炼之路

MySQL入门到高阶
共24章 | 武凤涛

468人订阅学习

读 书 +白菜送彩金大全

精通JBuilder 2006

JBuilder 2006是一款强大的Java企业级开发平台,其集成了几乎所有的Java技术,涵盖了软件开发生命周期的各个过程。本书深入浅出地介绍了JBu...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

博聚网