如何从Node.js MySQL查询结果提取值并生成指定JSON结构
解决MySQL去重结果转指定JSON格式的问题
嘿,我懂你现在的需求——从MySQL的experience列拿到去重值,最后返回{experience: ["1-3","1-5","5+"]}这种结构对吧?当前你的代码返回的是对象数组,差一步就能搞定。
问题根源
你当前的查询返回的是每条去重记录对应一个{experience: "xxx"}的对象,所以整体是数组。我们需要把这些对象里的experience值提取出来,重新包装成目标格式。
修改后的代码
直接在Node.js层面处理是最稳妥的方式,这里给你调整好的代码:
app.get('/experiences/', function(req, res) { // 注意这里要给URL加引号,之前的代码会因为语法报错 res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000'); connection.query('SELECT DISTINCT experience FROM questions', function(err, data) { if (err) { return res.send(err); } // 用map遍历数组,提取每个对象里的experience字段值 const experienceValues = data.map(item => item.experience); // 组装成你要的JSON结构返回 res.json({ experience: experienceValues }); }); });
关键说明
- 修复语法错误:之前的
http://localhost:3000没加引号,这在JavaScript里会被当作标识符解析,直接报错,必须改成字符串形式。 - 数组转换:用
Array.map()方法把查询返回的对象数组转换成纯字符串数组,这一步简单高效,而且不用担心值里包含特殊字符(比如逗号)的问题。 - 包装返回结构:把得到的字符串数组放到键为
experience的对象里,用res.json()返回就完美符合你的需求了。
可选的MySQL层面处理(不推荐)
如果你想在SQL里直接处理,可以用GROUP_CONCAT,但要注意值里有逗号的话会出问题:
SELECT GROUP_CONCAT(DISTINCT experience SEPARATOR ',') AS experience FROM questions
然后在JS里拆分:
const experienceValues = data[0].experience.split(',');
但还是推荐第一种JS处理的方式,兼容性和灵活性更好。
内容的提问来源于stack exchange,提问作者Rory Harrison
相关产品推荐
相关产品推荐

