mysql查询转json数据库_数据库大师成长日记:将数据库SQL查询结果直接转为JSON...

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

89a1ae2579ca6bf3d98fdeab2a8cffb9.png

SQL与Json

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

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

测试数据准备

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

declare @sale  table(

FName nvarchar(50),

FDistrict nvarchar(50),

FAmount decimal(28,10)

);

insert  into @sale

values

('张三','北京',20000),

('张三','上海',50000),

('张三','深圳',40000),

('张三','广州',30000),

('李四','北京',30000),

('李四','上海',50000),

('李四','深圳',40000),

('李四','广州',10000);

210e68817ca6193c624b233d21c87eeb.png

演示数据

神奇的for json auto子句

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

select * from @sale  for json auto

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

08e94e16958afd57bc072c5a5e4412f2.png

查询结果自动转成Json

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

b84725f31f4e7f83f58b9d74c39f2b48.png

自动导出的Json文本

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

神奇的for json path子句

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

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

select FName  as 姓名,

FDistrict as '销售情况.区域',

FAmount as '销售情况.金额'

from @sale

for json path

查询的结果也是Json文本:

53b19e197aa5400b3728e0ec37f18ce3.png

查询结果自动转成Json

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

41d628389ea3d51f18ea35eba2ecbe93.png

自动导出的Json文本

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

神奇的ROOT选项

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

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

select FName  as 姓名,

FDistrict as '销售情况.区域',

FAmount as '销售情况.金额'

from @sale

for json path, root('业务信息');

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

bd51c431cfa9f79adff7402d8f6a5739.png

查询结果自动转成Json

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

e50aae78b1c043208bf93300359a1e18.png

自动导出的Json文本

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

希望对您有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值