还来一篇说下json_value 以及 json_query 的应用 (3)
2016-04-20 11:06
1066 查看
上一篇说了一下openjson 的一些使用方法,这次再说一下在2016里面的查询取值,当然就是 json_query 和 json_value 这2兄弟了
首先
可以看到,对于json_value 来说,如果说取到的属性并不能直接解析成int,string,bool 这3种类型(那就是说 array 类型和 Object 类型是返回空的),
而json_query 则刚刚相反,对于能解析成int,string,bool 的项,它直接返回Null值,对于 array 和object 则把对应的元素返回。这2个的区别是要搞清楚的。
PS:对于这个json来说,它是解析时才会去检测语法的。不像xml先检查整个xml有没有错,然后再解析,改造一下上面的样例,就是这个样子
首先使用 isjson() 函数判断@json 变量是否一个标准json 格式,很明显不是,因为 d 的位置缺少了双引号。所以返回0
那正常来说既然这样的话下面2个jsonquery 应该都报错或者都返回 Null 才对。
然而 查询a 的值的时候,是可以返回的,因为还没有到分析错误的位置。所以 查询a 的值的语句是有效的。返回 [6,4]
但是查询c 的时候,因为需要经过d的位置,报错来,所以无法进行下去。所以语句就报语法错误。就是这个道理。
如果说得不对,欢迎大家继续拍砖
首先
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的位置,报错来,所以无法进行下去。所以语句就报语法错误。就是这个道理。
如果说得不对,欢迎大家继续拍砖
相关文章推荐
- edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets属性详解 )——转载
- SPOJ QTREE- Query on a tree (树链剖分)
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla
- 如何写好一个UITableView(上)
- UITabBarController自定义转场动画
- NullPointerException at com.android.volley.Request.<init>(Request.java:130)
- 【转】 ios的手势操作之UIGestureRecognizer浅析
- android属性动画相关类学习---ValueAnimator
- UIAlertController的使用
- LeetCode 308. Range Sum Query 2D - Mutable(二维区间求和)
- 手势同UI控件事件的冲突
- UIButton上同时显示图片和文字的方法
- 内部Fragment设置为public static和checkReleaseBuilds false与abortOnError false
- URI,QUERY_STRING 。。。
- hduFruit(母函数+每种物品都要添加最少的量)
- IOS开发之——意见反馈UITextView的使用+不能输入字符输入
- 设置UISearchBar输入字体颜色和默认字体颜色
- Druid数据库连接池简单使用介绍
- 《iOS Human Interface Guidelines》——Web Clip Icons
- iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码