将数据库SQL查询结果直接转为JSON
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
![](https://s5.51cto.com/oss/201901/03/e0dbe13c53628763e1f6ce10ea96b418.jpg)
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);
![](https://s2.51cto.com/oss/201901/03/c91851325ed1c1b3f4dfa10f8a245750.jpg)
演示数据
神奇的for json auto子句
在查询的from子句中加上 for json auto,查询结果就会自动转成json文本,这是最简单的一种转换方式。
- select *from @sale for json auto
查询的结果就是json文本了。
![](https://s4.51cto.com/oss/201901/03/0b831b7947ff0d53b83323641ce1f380.jpg)
查询结果自动转成Json
把Json抓取出来,效果如下:
![](https://s4.51cto.com/oss/201901/03/7020b91083d44a7be7055cad9f34fff6.jpg)
自动导出的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文本:
![](https://s5.51cto.com/oss/201901/03/8ac891a14d3cd2fdf40e11674767dc1c.jpg)
查询结果自动转成Json
把Json抓取出来,效果如下:
![](https://s5.51cto.com/oss/201901/03/dac353b874d62082afc9d9db01602242.jpg)
自动导出的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文本:
![](https://s5.51cto.com/oss/201901/03/3c159cbbc5246101dd5b300f24beef62.jpg)
查询结果自动转成Json
把Json抓取出来,效果如下:
![](https://s5.51cto.com/oss/201901/03/19549e5e96f361960908aa70fe6ed01f.jpg)
自动导出的Json文本
可以看到Json添加了根节点“业务信息”。
希望对您有所帮助!
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地