继续说一下2016里面的json功能(1)
首先先來測試數(shù)據(jù),數(shù)據(jù)是使用之前的,就
不要在意這些細(xì)節(jié)了啊~
借用上一篇的測試數(shù)據(jù) 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 來進(jìn)行測試,最簡單的例子
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 解析成結(jié)果集的形式,如果節(jié)點不存在那么賦值則為空
其實也就跟openxml 的用法比較類似
?
然后用法2 ,可以解析出json 格式里面的格式,當(dāng)openjson 后面沒有加關(guān)鍵字with 的時候,則認(rèn)為是解析出json本身的結(jié)構(gòu)。比方說(因為使用格式化成文本在這個語句下面有點奇怪,所以就用結(jié)果集貼上來,有點亂,大家將就著)
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 也是會認(rèn)為是整形的,所以即使可以解析出來類型,但是也不要太相信它能給你帶來準(zhǔn)確的數(shù)據(jù)類型就對了。
有人可能問,那如果是一個json里面包含多個行對象,其實是可以用openjson with?的格式來解析的,那它怎么認(rèn)定呢?比如說
使用openjson來直接解析,很明顯得出,4個列都是Object類型,僅此而已。
一般情況下,用的就是這部分咯~嗯~這次就到這里,下篇再寫
?
轉(zhuǎn)載于:https://www.cnblogs.com/Gin-23333/p/5402859.html
總結(jié)
以上是生活随笔為你收集整理的继续说一下2016里面的json功能(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring框架学习笔记(一)
- 下一篇: 阿里云OSS图片上传类