如何通过JSON.stringify传多值?PostgreSQL IN查询仅返回单条结果问题
问题分析与解决方案
核心问题
你请求里的(6,62,63)在JavaScript中是逗号运算符,它会返回最后一个表达式的值,也就是63。所以服务器实际只收到了UserIdList=63,自然只返回对应的数据。
修正步骤
1. 修正前端请求参数格式
把(6,62,63)改成数组格式[6,62,63],这样才能正确传递多个ID:
const requestDataSql = JSON.stringify({ "ApiVersion": 1.1, "ApiKey": "ApiKey", "Name": "GetNameMultiple", "Params": { "UserIdList": [6,62,63] // 改成数组格式 } });
2. 适配服务器端SQL处理逻辑
如果服务器端支持直接绑定数组参数,建议把SQL里的IN替换为PostgreSQL更适合数组的= ANY语法:
SELECT a."UserId", a."Name" FROM public."Users" AS a WHERE a."UserId" = ANY (@UserIdList) -- 替换IN为= ANY ORDER BY a."UserId";
如果服务器端仅支持接收逗号分隔的字符串参数,前端需要把数组转为字符串:
"UserIdList": "6,62,63"
同时SQL要调整为解析字符串数组的写法:
SELECT a."UserId", a."Name" FROM public."Users" AS a WHERE a."UserId" IN (string_to_array(@UserIdList, ',')::int[]) ORDER BY a."UserId";
验证建议
- 先在浏览器控制台打印
requestDataSql,确认JSON里的UserIdList格式正确 - 查看服务器端日志,确认收到的参数值是否符合预期
内容的提问来源于stack exchange,提问作者Oosutsuke
相关产品推荐
相关产品推荐

