You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中转换JSON数组,提取Count值为纯数组?

在SQL Server中提取JSON数组内的Count值生成纯数组的实现方法

可以在SQL Server中实现这个需求,核心是利用OPENJSON解析JSON结构,结合STRING_AGG聚合Count值,再通过JSON_QUERY重新构造数组格式,最后用FOR JSON PATH生成目标JSON结构。

实现代码

DECLARE @OriginalJSON NVARCHAR(MAX) = N'[
  {
    "ItemName": "ITEM1",
    "Details": [
      {
        "column1": "2021/Apr",
        "Count": 10
      },
      {
        "column1": "2021/May",
        "count": 20
      },
      {
        "column1": "2021/Jun",
        "count": 30
      }
    ]
  },
  {
    "ItemName": "ITEM2",
    "Details": [
      {
        "column1": "2021/Apr",
        "count": 10
      },
      {
        "column1": "2021/May",
        "count": 25
      },
      {
        "column1": "2021/Jun",
        "count": 2
      }
    ]
  }
]';

SELECT
  j1.ItemName,
  JSON_QUERY('[' + STRING_AGG(j2.CountValue, ',') + ']') AS Details
FROM OPENJSON(@OriginalJSON)
WITH (
  ItemName NVARCHAR(50) '$.ItemName',
  Details NVARCHAR(MAX) '$.Details' AS JSON
) j1
CROSS APPLY OPENJSON(j1.Details)
WITH (
  CountValue INT '$."count"' -- 兼容键名大小写差异
) j2
GROUP BY j1.ItemName
FOR JSON PATH, ROOT('');

代码说明

  1. 外层JSON解析:通过OPENJSON将原始JSON数组拆分为单条记录,标记Details为JSON类型以便后续解析。
  2. 子数组解析:用CROSS APPLY配合OPENJSON拆分每个Details子数组,提取其中的count值(用$."count"兼容大小写不同的键名)。
  3. 聚合生成数组:用STRING_AGG将同一ItemName下的所有Count值拼接成字符串,再包裹方括号形成数组格式。
  4. JSON格式处理:通过JSON_QUERY确保输出的数组是合法JSON类型,避免被转义为普通字符串。
  5. 生成目标JSON:用FOR JSON PATH按指定结构聚合结果,ROOT('')去掉默认根节点,生成符合要求的JSON数组。

内容的提问来源于stack exchange,提问作者shan127

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:00:51