You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:14:42