【问题标题】:SQL Query to get the count of Json ArraySQL 查询以获取 Json 数组的计数
【发布时间】:2020-05-14 09:41:06
【问题描述】:

我有下面的 Json 对象。如何获取对象数组的计数。

{
  "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

【问题讨论】:

  • 您提供的 JSON 无效;除非您拥有有效的 JSON,否则您将无法使用任何 JSON 函数。

标签: sql json sql-server-2019


【解决方案1】:

如果您有有效的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2016-12-08
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多