如何在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('');
代码说明
- 外层JSON解析:通过
OPENJSON将原始JSON数组拆分为单条记录,标记Details为JSON类型以便后续解析。 - 子数组解析:用
CROSS APPLY配合OPENJSON拆分每个Details子数组,提取其中的count值(用$."count"兼容大小写不同的键名)。 - 聚合生成数组:用
STRING_AGG将同一ItemName下的所有Count值拼接成字符串,再包裹方括号形成数组格式。 - JSON格式处理:通过
JSON_QUERY确保输出的数组是合法JSON类型,避免被转义为普通字符串。 - 生成目标JSON:用
FOR JSON PATH按指定结构聚合结果,ROOT('')去掉默认根节点,生成符合要求的JSON数组。
内容的提问来源于stack exchange,提问作者shan127
相关产品推荐
相关产品推荐

