• 继续说一下2016里面的json功能(1)


    首先先来测试数据,数据是使用之前的,就

    不要在意这些细节了啊~

    借用上一篇的测试数据
    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 来进行测试,最简单的例子

    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 解析成结果集的形式,如果节点不存在那么赋值则为空

    其实也就跟openxml 的用法比较类似

    然后用法2 ,可以解析出json 格式里面的格式,当openjson 后面没有加关键字with 的时候,则认为是解析出json本身的结构。比方说(因为使用格式化成文本在这个语句下面有点奇怪,所以就用结果集贴上来,有点乱,大家将就着)

    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 也是会认为是整形的,所以即使可以解析出来类型,但是也不要太相信它能给你带来准确的数据类型就对了。
    有人可能问,那如果是一个json里面包含多个行对象,其实是可以用openjson with 的格式来解析的,那它怎么认定呢?比如说

    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}]'

    使用openjson来直接解析,很明显得出,4个列都是Object类型,仅此而已。

    一般情况下,用的就是这部分咯~嗯~这次就到这里,下篇再写

  • 相关阅读:
    BZOJ3105:[CQOI2013]新Nim游戏(线性基,贪心)
    BZOJ5102:[POI2018]Prawnicy(贪心,堆)
    BZOJ3533:[SDOI2014]向量集(线段树,三分,凸包)
    BZOJ3569:DZY Loves Chinese II(线性基)
    BZOJ3534:[SDOI2014]重建(矩阵树定理)
    【BZOJ 1202】 [HNOI2005]狡猾的商人
    【BZOJ 1003】 [ZJOI2006]物流运输trans
    【BZOJ 2321】 [BeiJing2011集训]星器
    【BZOJ 1010】 [HNOI2008]玩具装箱toy
    【BZOJ 2730】 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5402859.html
Copyright © 2020-2023  润新知