首页 > Web开发 > 详细

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

时间:2016-04-20 13:02:35      阅读:190      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!