zoukankan      html  css  js  c++  java
  • 继续说一下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类型,仅此而已。

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

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5402859.html
Copyright © 2011-2022 走看看