你的位置:首页 > 数据库

[数据库]继续说一下openjson 以及 json path 的使用


在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子

declare @v nvarchar(500) = N'{"name":"test", "obj":{"arr":[1,"ofao",3,4,5]}}'select * from openjson(@v)/*key  value  typename  test  1obj  {"arr":[1,"ofao",3,4,5]}  5 */select *   from openjson (@v,'$.obj.arr')/*key  value  type0  1  21  ofao  12  3  23  4  24  5  2*/

这样,就可以把array里面的每一个元素从列转行出来。是不是看起来很方便~虽然目前没有用到,但是留存个认知还是好的。

说到这里,我就还想说一下 json里面的path 的用法。json path 的基础写法,其实和

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')

参考之前的例子

就是在路径之前加上一个 $. 的前缀,然后每一级就用一个. 来探查下一级。(PS:json 这里计数从0开始,不是1开始)

declare @v nvarchar(500) = N'{"name":"test", "obj":{"arr":[1,"ofao",3,4,5], }}'select json_value(@v,'$.obj.arr[0]')--1


目前呢,我还没发现它支持类似

好~这次就到这里~