在Sql Server 2016中使用For Json子句把数据做为json格式导出

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/sql

使用for json子句把查询结果做为json字符串导出,将做为sql server 2016中首先可用的一个特性。若是你熟悉for xml子句,那么将很容易理解for json:数据库

select ccolumn, expression, column as alias
    from table1, table2, table3
    for json [auto | path]

若是你把for json子句添加到T-SQL Select查询语句的最后,SQL Server将会把结果格式化为JSON字符串以后在返回到客户端。每一行数据将会格式化为一个json对象,每个数据字段将会成为行对象的值,列名或者列的别名会做为行对象的键。咱们有两种类型的for json子句:express

  • FOR JSON Path,经过列名或者列别名来定义JSON对象的层次结构,列别名中能够包含“.”,JSON的成员层次结构将会与别名中的层次结构保持一致。
    这个特性很是相似于早期SQL Server版本中的For Xml Path子句,可使用斜线来定义xml的层次结构。
  • FOR JSON Auto,自动按照查询语句中使用的表结构来建立嵌套的JSON子数组,相似于For Xml Auto特性。

若是你用过PostgreSQL中涉及到JSON的函数和操做符,你会注意到,FOR JSON子句类等价于PostgreSQL中的JSON建立函数好比row_to_json或json_object。FOR JSON子句的主要目的是根据JSON规范把变量、列格式化为JSON对象。好比:json

set @json = (select 1 as firstKey, getdate() as dateKey, @someVar as thirdKey for json path)
-- result is : {"firstKey": 1, "dateKey": "2016-06-15 11:35:21", "thirdKey": "Content of variable"}

FOR JSON子句主要应用场景:数组

    • 把须要返回给客户端的一组对象序列化为JSON。想象一下,在你建立JSON Web服务的时候,须要提供供应商信息及其产品信息(好比在OData服务中使用$extend选项)。你可能会查询供应商列表,把每一个供应商信息格式化为JSON对象并经过额外查询来得到这个供应商的产品列表,将其转化为JSON对象数组附加到供应商对象。其余方案可能会经过连接查询来得到供应商和产品信息列表,使用客户端代码来格式化为JSON对象(若使用Entity Framework将可能产生额外查询)。使用for json子句,你能够链接这两个表进行查询,添加你想要的前缀(定义JSON层次结构),在数据库层完成JSON格式化工做。
    • 在一对多的父子表关系场景,你不想建立子表,而是想把子表的记录以JSON数组的格式存储做为父表的一列。好比你不想把SalesOrderHeader和SalesOrderDetails数据分红两个表来保存,你能够把每一个订单的多个商品详情格式化为JSON数组保存到SalesOrderHeader表中的一列。
相关文章
相关标签/搜索