SQL查询以获取Json数组的计数

标签 sql json sql-server-2019

我有下面的 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(目前您有一个尾随逗号( , _ 在您的一个右大括号( } )之后),那么您可以使用 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;

关于SQL查询以获取Json数组的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61794126/

相关文章:

mysql - 重置 Mysql workbench root 密码

javascript - 通过ajax传输 HashMap 并转换为php数组

mysql - 使用 % 和 IN 子句进行查询

sql - 分析表,优化表,多久一次?

sql - Delphi:访问 JSON 数组中的 JSON 对象

sql-server - SQL Server 2019 - 服务器主体 "sa"在当前安全上下文下无法访问数据库 "DB_NAME"

sql - SQL Server 复制中的内存映射文件写入失败

javascript - 使用 Angular 形式将元素值形成为 JSON

PHP将从Android接收到的POST数据插入MySQL数据库

sql - 如何在 SQL Server 中使 WHERE CLAUSE 区分大小写