SQL Server 对JSON的支撑

soゝso 2016-08-22 18:36:59 9068

SQL Server 2016有望供给JSON操作原生支撑。这一支撑的初次迭代将作为SQL Server 2016 CTP 2的一部分发布。CTP别名社区技巧预览版,同等于微软的地下Alpha测试,时代,开辟者可以提出技巧上的修改建议。

原文链接:http://www.infoq.com/news/2015/05/SQL-Server-JSON

JSON导出

“格局化和导出”JSON是CTP 2的重要功能。这可以经过过程在SELECT语句的末尾增长FOR JSON子句完成。该功能基于FOR XML子句,并且与它类似,许可对成果JSON字符串停止主动和半手工格局化。

微软欲望这一语法可以供给与PostgreSQL的row_to_json和json_object函数雷同的功能。

JSON转换

大年夜部分功能将在CTP 3中发布。这些功能中的第一项是FROM OPENJSON子句,这是一个表值函数(TFV),它接收一个JSON字符串作为输入。它还须要一个数组或对象在被解析的JSON数据中的途径。

默许情况下,OPENJSON前往一个键值对集合,但开辟者可以应用WITH子句供给一个形式。由于JSON不支撑日期或整数(它们分别表示为字符串和double类型),所以WITH子句可以增添稍后须要的类型转换数量。

下面是JSON Support in SQL Server 2016 的Demo:

DECLARE @JSalestOrderDetails nVarCar(2000) = N '{"OrdersArray": [

{"Number":1, "Date": "8/10/2012", "Customer": "Adventure works", "Quantity": 1200},

{"Number":4, "Date": "5/11/2012", "Customer": "Adventure works", "Quantity": 100},

{"Number":6, "Date": "1/3/2012", "Customer": "Adventure works", "Quantity": 250},

{"Number":8, "Date": "12/7/2012", "Customer": "Adventure works", "Quantity": 2200}

]}';
SELECT Number, Customer, Date, Quantity

FROM OPENJSON (@JSalestOrderDetails, '$.OrdersArray')

WITH (

Number varchar(200),

Date datetime,

Customer varchar(200),

Quantity int

) AS OrdersArray

微软传播鼓吹,在PostgrSQL中完成异样的功能须要综合应用json_each、json_object_keys、json_populate_record和json_populate_recordset函数。

JSON存储

正如所见,JSON数据存储在NVARCHAR变量中。在表的列中存储JSON数据也是如许。关于为甚么这么做,微软有如上去由:

  1. 迁徙——我们发明,人们早已将JSON存储为文本,是以,假设我们引入一种伶仃的JSON类型,那么为了应用我们的新特点,他们将须要修改数据库形式,偏重新加载数据。而采取如今这类完成方法,开辟者不须要对数据库做任何修改便可以应用JSON功能。
  2. 跨功能的兼容性——一切SQL Server组件均支撑NVARCHAR,是以,JSON也将在一切的组件中取得支撑。开辟者可以将JSON存储在Hekaton、时态表或列存储表中, 应用包含行级安然在内的标准安然战略,应用标准B树索引和FTS索引,应用JSON作为参数或前往过程值,等等。开辟者不须要推敲功能X能否支撑JSON ——假设功能X支撑NVARCHAR,那么它也支撑JSON。另外,该特点有一些束缚——Hekaton及列存储不支撑LOB值,所以开辟者只能存储小 JSON文档。不过,一旦我们在Hekaton及列存储中增长了LOB支撑,那么开辟者便可以在任何处所存储大年夜JSON文档了。
  3. 客户端支撑——今朝,我们没有为客户端应用法式榜样供给标准JSON对象类型(类似XmlDom对象的器械)。天然地,Web和移动应用法式榜样和 JavaScript客户端将应用JSON文本,并应用本地解析器解析它。在JavaScript中,可以应用object类型表示JSON。我们不太可 能完成一些仅在多数RDBMS中存在的JSON类型代理。在C#.Net中,很多开辟者应用内置了JObject或JArray类型的 JSON.Net解析器;不过,那不是一种标准,也不太能够成为ADO.NET的一部分。即使如此,我们认为,C#应用可以接收来自数据库层的纯字符串, 并应用最爱好的解析器解析它。我们所议论的内容不只是跟应用法式榜样有关。假设开辟者试图在SSIS/SSRS、Tableau和Informatica ETL中应用JSON列,它们会将其视为文本。我们认为,即使我们增长了JSON类型,在SQL Server以外,它仍将被表示成字符串,并根据须要应用某个自定义的解析器解析它。是以,我们并没有找就任何严重年夜的来由将其完成为一种原生JSON类 型。

在包含JSON的NVARCHAR列上应用新的ISJSON函数作为检查束缚是个不错的主意。假设不如许做,那么有缺点的客户端应用法式榜样就可以够拔出弗成解析的字符串,使开辟者面对数据污染的风险。

JSON查询

假设直接对JSON停止标量查询,可以应用JSON_VALUE函数。该函数应用一种类似JavaScript的符号定位JSON对象中的值。它应用$符 号表示object的根,点号表示属性,方括号表示数组索引。它与PostgreSQL中的json_extract_path_text函数等效。

JSON索引

JSON数据可以直接索引,但开辟者可以绝不辛苦地在标量数据上完成异样的后果。只须要应用JSON_VALUE函数创建一个计算列,然后在这个列上创建索引。

“缺掉的”特点

微软针对JSON的支撑筹划中并没有包含每个开辟者想要的功能。很多人认为,公用的JSONB列类型可以供给更好的性能。其他人欲望支撑JSON数据修补,而不是必须全部地调换文档。

检查英文原文: SQL Server to add JSON Support

版权所属:SO JSON在线解析

原文地址:http://exergyanc.com/blog/22.html

转载时必须以链接情势注明原始出处及本声明。

本文主题:

假设本文对你有赞助,那么请你赞助我,让我更有豪情的写下去,赞助更多的人。

关于作者
一个低调而闷骚的汉子。
相干文章
谈谈此次对 SOJSON 的改版
GZIP紧缩JSONJSON紧缩
city.json
cpu资本收集.json
json 解析与生成对象类 ,JSON操作讲解(附件)
JSON数据格局,JSON格局化简介,JSON格局简介。
Jackson 美化输入JSON,优雅的输入JSON数据,格局化输入JSON数据... ...
JSON格局讲解,JSON获得对象,JSONObject和JSONArray的操作
SOJSON 应用又拍云 CDN 全体架构,处理百度 SEO 筹划
SOJSON.COM 站点简介
最新文章
Java JSON 组件选型之 FastJson 为甚么总有马脚? 404
应用七牛云存储完成图片API,主动删除图片筹划合集 1395
神速ICP立案经历分享,ICP立案居然一天就经过过程了 2390
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 3035
SOJSON 拓展办事器被DDos进击了一早晨,是若何处理的? 3413
湖南地区立案“新增网站需提交组网筹划或解释解释”,关于立案做简单论述 3510
企查查你是个甚么企业,骗子的帮凶,欺骗的集中营,经过过程企查查骚扰企业德律风赓续,为所欲为的企查查 9849
Java爬取百度云不雅测对网站的检测数据,获得子域名及域名的安然信息 2607
【2020年】百度搜刮词获得,获得百度搜刮的关键词【真实有效】 7453
Nodejs情况装置,Nodejs情况装置一篇就够了 1832
最热文章
苹果电脑Mac怎样恢复出厂体系?苹果体系怎样重装体系? 435530
我为甚么要选择RabbitMQ ,RabbitMQ简介,各类MQ选型比较 419372
收费气象API,全国气象 JSON API接口,可以获得五天的气象预告 351934
最新MyEclipse8.5注册码,有效期到2020年 (曾经更新) 316004
收费气象API,气象JSON API,不限次数获得十五天的气象预告 290653
Elasticsearch教程(四) elasticsearch head 插件装置和应用 223145
Jackson 时间格局化,时间注解 @JsonFormat 用法、时差成绩解释 181164
谈谈斐讯路由器劫持,你用斐讯路由器,你须要知道的任务 136912
Elasticsearch教程(一),全程直播(小白级别) 120318
Elasticsearch教程(五) elasticsearch Mapping的创建 99443

骚码参加我们 / 千人QQ群:259217951

入群须要5元为的是没有渣滓告白,假设没有QQ钱包,可以加群主拉进。

二维码生成 来自 >> 二维码生成器

付出扫码

一切赞助/开支都讲地下通细,用于网站保护:赞助名单检查

检查我的收藏

正在加载... ...