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

上一篇说了一下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的位置,报错来,所以无法进行下去。所以语句就报语法错误。就是这个道理。

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

时间: 2024-10-05 22:32:23

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

红茶一杯话Binder (传输机制篇_下)

红茶一杯话Binder (传输机制篇_下) 侯 亮 1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头.另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向binder驱动发出BC_REPLY语义.当BC_语义经由binder驱

手把手教你玩转SOCKET模型之重叠I/O篇(下)

四.     实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却是真的不难,唯一需要理清思路的地方就是和大量的客户端交互的情况下,我们得到事件通知以后,如何得知是哪一个重叠操作完成了,继而知道 究竟该对哪一个套接字进行处理,应该去哪个缓冲区中的取得数据,everything will be OK^_^. 下面我们配合代码,来一步步的讲解如何亲手完成一个重叠模型.

经典sql-获取当前文章的上一篇和下一篇

我们在做资讯类的网站的时候,肯定会有这么一个需求,就是在资讯内容页的下方需要给出上一篇和下一篇资讯的链接.上次我一同事兼好友兼室友就遇到了这么一个需求,一开始我们都把问题想复杂了,先取的是符合条件的资讯信息集合,然后再找到当前这条资讯信息在集合中的索引,通过索引再找到他的上一篇资讯和下一篇资讯信息,这种做法确实是可以实现这个需求,但是一旦资讯信息的数量过大,很有可能因为这段代码导致整个资讯内容页半天都打不开,所以,必须得另辟蹊径. 其实这个问题很简单,后来经过我们主管给我们稍微一指点,瞬间觉得高

又一篇Centos7下的asp.net core部署教程

原文:又一篇Centos7下的asp.net core部署教程 历程2个多月的学习,我终于从PHP转.Net开发了. 虽然网上已经有很多关于asp.net core在linux下的部署教程了,但我还是想写一篇,主要增强我自己的记忆. 搭建的环境为Centos7 + .net core  + nginx + mysql5.7,我的网站是asp.net core后端,vue前端,数据据mysql: 第一次搭建时遇到不少的坑,我会在下面也说到 前提,你有一台可以联网,有root账号密码,有开通ssh的

计算机考研复试面试常问问题 计算机网络篇(下)

计算机考研复试面试常问问题 计算机网络篇(下) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!绝对良心之作! 此系列一共有8篇:编程语言篇|数据结构篇|操作系统篇|组成原理篇|计算机网络篇|数据库篇|软件工程篇|计算机专业英语篇(还未全部完成,敬请期待,你们的支持和关注是我最大的动力!) 个人整理,不可用于商业用途,转载请注明出处. 作者各个平台请搜索:程序员宝藏.快来探索属于你的宝藏吧

onethink文章详情如何做上一篇和下一篇!

其实很简单,如果要做上一篇和下一篇,只要知道当前文章ID的前一个ID和后一个ID即可: //上一篇文章 $prewhere = array(); $prewhere['id'] = array('LT',$id); $pre = M('document')->where($prewhere)->field('id')->limit('1')->order('id desc')->select(); $pre = intval($pre['0']['id']); //下一篇文章

iOS开发项目篇—30下拉刷新

iOS开发项目篇—30下拉刷新 一.网络监控 当应用所处的网络环境不好的时候,获取不到相应的网络数据,考虑到用户对应用的使用体验,有必要对网络的状况进行监听. 在程序启动完的时候,监控网络 YYAppDelegate.m文件代码: 1 // 2 // YYAppDelegate.m 3 // 4 5 #import "YYAppDelegate.h" 6 #import "YYOAuthViewController.h" 7 #import "YYCont

shell第四篇(下)

摘自王垠的:Unix的缺陷 我想通过这篇文章解释一下我对 Unix 哲学本质的理解.我虽然指出 Unix 的一个设计问题,但目的并不是打击人们对 Unix 的兴趣.虽然 Unix 在基础概念上有一个挺严重的问题,但是经过多年的发展之后,这个问题恐怕已经被各种别的因素所弥补(比如大量的人力).但是如果开始正视这个问题,我们也许就可以缓慢的改善系统的结构,从而使得它用起来更加高效,方便和安全,那又未尝不可.同时也希望这里对 Unix 命令本质的阐述能帮助人迅速的掌握 Unix,灵活的应用它的潜力,避

ReactNative入门 —— 动画篇(下)

在上篇动画入门文章中我们了解了在 React Native 中简单的动画的实现方式,本篇将作为上篇的延续,介绍如何使用 Animated 实现一些比较复杂的动画. 动画组合 在 Animated 中提供了一些有趣的API方法来轻松地按我们的需求实现组合动画,它们分别是 Animated.parallel.Animated.sequence.Animated.stagger.Animated.delay. 我们会分别介绍这些方法,并从中学习到一些其它有用的API.最后我们会得到一个有趣的DOGE动