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

还来一篇说下json_value 以及 json_query 的应用 (3)

时间:2016-04-20 13:05:42      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:

上一篇说了一下openjson 的一些使用方法,这次再说一下在2016里面的查询取值,当然就是 json_query 和 json_value 这2兄弟了

首先

declare @json varchar(100) = {"a":"[6,4]","b":[7,4],"c":"hi"}

select json_query(@json,$.a),json_value(@json,$.a)
NULL                                         [6,4]

select json_query(@json,$.b),json_value(@json,$.b)
[7,4]                                         NULL

select json_query(@json,$.b[1]),json_value(@json,$.b[1])
NULL                                              4

select json_query(@json,$.c),json_value(@json,$.c)
NULL                                     hi

可以看到,对于json_value 来说,如果说取到的属性并不能直接解析成int,string,bool 这3种类型(那就是说 array 类型和 Object 类型是返回空的),
而json_query 则刚刚相反,对于能解析成int,string,bool 的项,它直接返回Null值,对于 array 和object 则把对应的元素返回。这2个的区别是要搞清楚的。

PS:对于这个json来说,它是解析时才会去检测语法的。不像xml先检查整个xml有没有错,然后再解析,改造一下上面的样例,就是这个样子

declare @json varchar(100) = {"a":"[6,4]",d:[7,4],"c":"hi"}

select isjson(@json)
select json_query(@json,$.a),json_value(@json,$.a)
select json_query(@json,$.c),json_value(@json,$.c)


首先使用 isjson() 函数判断@json 变量是否一个标准json 格式,很明显不是,因为 d 的位置缺少了双引号。所以返回0

那正常来说既然这样的话下面2个jsonquery 应该都报错或者都返回 Null 才对。

然而 查询a 的值的时候,是可以返回的,因为还没有到分析错误的位置。所以 查询a 的值的语句是有效的。返回 [6,4]

但是查询c 的时候,因为需要经过d的位置,报错来,所以无法进行下去。所以语句就报语法错误。就是这个道理。

 

如果说得不对,欢迎大家继续拍砖

 

还来一篇说下json_value 以及 json_query 的应用 (3)

标签:

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

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