码迷,mamicode.com
首页 > Web开发 > 详细

继续说一下2016里面的json功能(1)

时间:2016-04-18 01:08:29      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

首先先来测试数据,数据是使用之前的,就

不要在意这些细节了啊~

借用上一篇的测试数据
create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int)

insert into t1 values (张三,90,80),(李四,75,90),(王五,68,100),(赵六,90,null);

 

然后我们使用这个表里面生成的json 来进行测试,最简单的例子

declare @v nvarchar(600) = N[{"ID":1,"name":"张三","Chinese":90,"Math":80},{"ID":2,"name":"李四","Chinese":75,"Math":90},{"ID":3,"name":"王五","Chinese":68,"Math":100},{"ID":4,"name":"赵六","Chinese":100}]

select * from openjson(@v)
with (
ID int $.ID,
name nvarchar(50) $.name,
Math int $.Math,
Chinese int $.Chinese
)

------------------------
ID          name                                               Math        Chinese
----------- -------------------------------------------------- ----------- -----------
1           张三                                                 80          90
2           李四                                                 90          75
3           王五                                                 100         68
4           赵六                                                 NULL        100


就是最简答的将Json 解析成结果集的形式,如果节点不存在那么赋值则为空

其实也就跟openxml 的用法比较类似

 

然后用法2 ,可以解析出json 格式里面的格式,当openjson 后面没有加关键字with 的时候,则认为是解析出json本身的结构。比方说(因为使用格式化成文本在这个语句下面有点奇怪,所以就用结果集贴上来,有点乱,大家将就着)

declare @v nvarchar(600) = N{"ID":1,"name":"张三","Chinese":90,"Math":80}
select * from openjson(@v)


key    value         type
ID           1    2
name        张三    1
Chinese    90    2
Math    80    2

 

前面2个都好理解,第三个位置,type 。类型,在openjson 的解析里面是这样

0  null

1 string

2 int

3 bool

4 array

5 object

 

这样就不奇怪刚刚类型那个值的显示了,ID,Math ,Chinese都是整形,姓名是字符串,然后再来一个例子

declare @v nvarchar(600) = N{"ID":true,"name":null,"Chinese":9.9,"Math":"hello","arr":[1,2,3,4],"obj":{"name":"test"}}
select * from openjson(@v)


key    value     type
ID    true    3
name     NULL    0
Chinese    9.9    2
Math    hello    1
arr    [1,2,3,4]    4
obj    {"name":"test"}    5  

这里就可以看到,即使是9.9这样的类型,使用openjson 也是会认为是整形的,所以即使可以解析出来类型,但是也不要太相信它能给你带来准确的数据类型就对了。
有人可能问,那如果是一个json里面包含多个行对象,其实是可以用openjson with 的格式来解析的,那它怎么认定呢?比如说

declare @v nvarchar(600) = N[{"ID":1,"name":"张三","Chinese":90,"Math":80},{"ID":2,"name":"李四","Chinese":75,"Math":90},{"ID":3,"name":"王五","Chinese":68,"Math":100},{"ID":4,"name":"赵六","Chinese":100}]

使用openjson来直接解析,很明显得出,4个列都是Object类型,仅此而已。

一般情况下,用的就是这部分咯~嗯~这次就到这里,下篇再写

 

继续说一下2016里面的json功能(1)

标签:

原文地址:http://www.cnblogs.com/Gin-23333/p/5402859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!