SQL查询获取JSON数组的计数

balp4ylt  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(132)

我有下面的JSON对象。我如何获得Object Array的计数。

{
  "Model": [
    {
  "ModelName": "Test Model",    
  "Object": [
     {
       "ID": 1,
       "Name": "ABC"           

     },
     {
       "ID": 11,
       "Name": "ABCD"          
    },         
 ]  
 }]}

字符串
我尝试了下面的查询,但似乎JSON_Length不可用。

SELECT ModelName,
       JSON_LENGTH(JsonData, '$.Model[0].Object')
    FROM TabA


预期输出应为

ModelName      COUNT
 Test Model      2

7xllpg7q

7xllpg7q1#

如果你有有效的JSON(此时你有一个尾随逗号(, _在你的一个右括号(})之后),那么你可以使用OPENJSONCOUNT

DECLARE @JSON nvarchar(MAX) = N'{
  "Model": [
    {
  "ModelName": "Test Model",    
  "Object": [
     {
       "ID": 1,
       "Name": "ABC"           

     },
     {
       "ID": 11,
       "Name": "ABCD"          
    }         
 ]  
 }]}';

SELECT M.ModelName,
       COUNT(O.[key]) AS [Count]
FROM (VALUES(@JSON))V(J)
     CROSS APPLY OPENJSON(V.J)
                 WITH(ModelName varchar(20) '$.Model[0].ModelName',
                      [Object] nvarchar(MAX) '$.Model[0].Object' AS JSON) M
     CROSS APPLY OPENJSON(M.[Object]) O
GROUP BY M.ModelName;

字符串

tf7tbtn2

tf7tbtn22#

@Thom A的答案use OPENJSON and COUNT:的简化版本,通过消除CROSS APPLY s:

DECLARE @JSON nvarchar(MAX) = N'{
  "Model": [
    {
  "ModelName": "Test Model",    
  "Object": [
     {
       "ID": 1,
       "Name": "ABC"           

     },
     {
       "ID": 11,
       "Name": "ABCD"          
    }         
 ]  
 }]}';

select [ModelName] = JSON_value(@JSON, N'$.Model[0].ModelName')
     , [COUNT]     = count(*) 
  from openJSON(@JSON, N'$.Model[0].Object');

字符串
结果:
| ModelName|计数|
| --|--|
| 测试模型| 2 |

相关问题