首页 文章

如何计算 JSON 字符串中的节点数

提问于
浏览
1

有没有办法计算 SQL 中JSON中的节点数。

{   
 "File":[  
  {  
     "ID":1,
     "Fragment":"Frag1"
  },
  {  
     "ID":2,
     "Fragment":"Frag2"
  },
  {  
     "ID":3,
     "Fragment":"Frag3"
  }]
}

有没有办法计算File节点下的子元素数?

根据上面的例子,答案应该是 3。

3 回答

  • 4

    假设 SQL Server 2016 或更高版本,
    您可以使用OPENJSONselect count(*)

    DECLARE @Content varchar(500) = '{   
     "File":[  
      {  
         "ID":1,
         "Fragment":"Frag1"
      },
      {  
         "ID":2,
         "Fragment":"Frag2"
      },
      {  
         "ID":3,
         "Fragment":"Frag3"
      }]
    }';
    
    SELECT COUNT(*)
    FROM OPENJSON(@Content, N'$.File')
    

    结果:3

    DB<>Fiddle上观看现场演示

  • 0
    SELECT count(MyObjectList.ID)
        FROM Mytable
        CROSS APPLY OPENJSON (JsonDataCol, N'$.File')
          WITH (
            ID int)
              AS MyObjectList
    
  • 0

    这是 Json 字符串插入表中的另一种方法。您可以在较低的 Sql Server 版本(如 SQL Server 2008)中运行此操作,其中 OPENJSON 函数不可用。

    create table #temp (JsonDataCol varchar(max))
    insert into #temp values (
    
    '{   
     "File":[  
      {  
         "ID":1,
         "Fragment":"Frag1"
      },
      {  
         "ID":2,
         "Fragment":"Frag2"
      },
      {  
         "ID":3,
         "Fragment":"Frag3"
      }
    }'
    
    )
    
    DECLARE @string Varchar(20) = '"ID"'
    DECLARE @tosearch Varchar(Max)
    
    set @tosearch = (SELECT JsonDataCol FROM #temp)
    
    SELECT (LEN(@tosearch) - LEN(REPLACE(@tosearch, 'ID', '')))/2 as JsonLength
    
    DROP TABLE #temp
    

    这里除以 2,因为 ID 的长度是 2,并且它的一次出现是 1 个节点。如果您将 assign_1_variable 如下所示,您也可以在没有表的情况下运行此查询

    DECLARE @tosearch Varchar(Max) = '{   
     "File":[  
      {  
         "ID":1,
         "Fragment":"Frag1"
      },
      {  
         "ID":2,
         "Fragment":"Frag2"
      },
      {  
         "ID":3,
         "Fragment":"Frag3"
      }
    }'
    

    输出如下所示

    JsonLength
    3
    

    你可以在链接上找到现场演示SQL 演示 - Json 长度

相关问题