如何用FOR JSON PATH生成值数组而非对象?SQL Server技术求助
SQL Server单列id转纯值数组JSON的解决方法
你当前的FOR JSON PATH, ROOT('ids')会把每条id包装成{"id": "x"}的对象,不符合纯值数组的需求。以下两种方法可以生成你想要的JSON格式:
方法一:规范的JSON构造方式
使用STRING_AGG聚合id,配合JSON_QUERY确保JSON结构合法:
SELECT JSON_QUERY('["' + STRING_AGG(QUOTENAME(id, '"'), ',') + '"]') AS ids FROM [table] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
关键细节
QUOTENAME(id, '"'):给每个id添加双引号,避免JSON语法错误STRING_AGG将所有id拼接为"1","2","3"的字符串,加上方括号后就是标准JSON数组JSON_QUERY标记该字符串为合法JSON,防止SQL Server自动转义引号WITHOUT_ARRAY_WRAPPER取消默认的外层数组,直接输出单个JSON对象
方法二:手动拼接简化实现
如果你的id都是纯数字且无特殊字符,也可以直接手动拼接JSON结构:
SELECT '{"ids": ["' + STRING_AGG(id, '","') + '"]}' AS json_result FROM [table]
两种方法执行后都会得到目标输出:
{ "ids": [ "1", "2", "3" ] }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

