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

时间:2018-12-12 09:00:07

标签: json sql-server tsql

有没有一种方法可以计算SQL JSON中的节点数。

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

是否可以计算File节点下的子元素数量?

根据上面的示例,答案应为3。

3 个答案:

答案 0 :(得分: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上观看实时演示

答案 1 :(得分:0)

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

答案 2 :(得分: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个节点。 如果您将如下所示分配@tosearch变量,也可以不使用表运行此查询

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

输出如下所示

JsonLength
3

您可以在链接SQL Demo - Json Length上找到实时演示