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

如何在JavaScript中解析MySQL嵌套查询返回的字符串化answers字段

问题根源

  • Array.forEach() 本身没有返回值,执行后返回undefined,你把forEach的执行结果传入Promise.resolve(),自然then回调里拿到的就是undefined
  • 调用JSON.parse()后没有把解析结果赋值回result.answers字段,解析后的结果直接被丢弃,原对象没有被修改
  • 解析操作是同步执行的,不需要额外用Promise封装
  • 原判断条件result['answers'] !== undefined不严谨,你的数据里存在answers为null的情况,应当判断为answers非null时才执行解析
  • 你在解析逻辑执行完成前就调用了res.json(),返回给客户端的依然是未处理的原始数据

修复后代码

db.query(query, [req.query['product_id'], req.query['count']], (error, results) => {
    if (error) {
      console.log('err err ', error);
      return res.status(500).json('Database query error')
    }
    if (!results.length) {
      return res.json('No questions found')
    }
    // 同步遍历解析answers字段
    results.forEach(result => {
      if (result.answers !== null) {
        result.answers = JSON.parse(result.answers)
      }
    })
    // 处理完成后再返回结果
    res.json(results.slice(0, req.query['count']));
  })

可选的map写法

如果你不想修改原results数组,可以用map生成新的处理后数组:

const processedResults = results.map(result => {
  if (result.answers === null) return result
  return {
    ...result,
    answers: JSON.parse(result.answers)
  }
})
res.json(processedResults.slice(0, req.query['count']))

内容的提问来源于stack exchange,提问作者Callum Reid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:45:05