SQL Server 2019中如何用FOR JSON生成无键JSON数组?
解决方案:生成无键JSON数组(值数组)
在SQL Server 2019中,FOR JSON AUTO/PATH默认会生成带键的对象数组,若要直接生成仅包含值的JSON数组,最简洁且避免字符串替换的方法是使用STRING_AGG函数拼接值,再包裹成JSON数组格式。
1. 数值类型场景(如示例中的年份)
直接拼接数值并包裹数组符号即可:
declare @years table (year int) insert into @years values (2022),(2021),(2020) SELECT '[' + STRING_AGG(CAST(year AS VARCHAR(10)), ',') + ']' AS json_array
执行后输出:[2022,2021,2020]
2. 字符串类型场景
若处理字符串,需为每个值添加双引号,并转义字符串内部的双引号(避免JSON格式错误):
declare @names table (name varchar(50)) insert into @names values ('Alice'),('Bob O''Neil'),('Charlie "Chuck"') SELECT '[' + STRING_AGG('"' + REPLACE(name, '"', '""') + '"', ',') + ']' AS json_array
执行后输出:["Alice","Bob O'Neil","Charlie ""Chuck"""](符合JSON规范)
补充:结合JSON_QUERY确保JSON类型输出
如果需要确保结果被识别为JSON类型而非字符串,可以用JSON_QUERY包装拼接结果:
declare @years table (year int) insert into @years values (2022),(2021),(2020) SELECT JSON_QUERY('[' + STRING_AGG(year, ',') + ']') AS json_array FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
此方法返回的是JSON对象而非字符串,适合后续需要直接处理JSON的场景。
内容的提问来源于stack exchange,提问作者c_tothe_k
相关产品推荐
相关产品推荐

