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

如何在Node.js MySQL中获取JSON类型而非字符串结果

当然有办法搞定这个问题!不用手动遍历结果做JSON.parse的话,有两个实用方案,看你需求选:

方案1:改用mysql2包(首推)

mysql2是老牌mysql包的升级版,原生就支持自动解析MySQL的JSON类型字段,几乎不需要改动现有代码,省心又靠谱。

步骤很简单:

  1. 先安装mysql2:
npm install mysql2
  1. 替换你的连接代码(查询逻辑完全不用改):
const mysql = require('mysql2');
// 初始化连接,配置和原来一致
const con = mysql.createConnection({
  host: '你的数据库主机',
  user: '数据库用户名',
  password: '数据库密码',
  database: '目标数据库名'
});

// 你的查询代码原封不动保留
con.query("select * from TEST where id=?", [req.params.id], function (err, results) {
  if (err) throw err;
  console.log(results);
  // 这里的`package`字段已经是现成的JavaScript对象了!
});

用这个方案的话,所有JSON类型的字段都会自动被解析,完全不用你手动处理。

方案2:在原mysql包中配置自动类型转换

如果你不想更换依赖包,可以利用mysql包自带的typeCast配置项,全局设置一次JSON字段的自动解析逻辑:

const mysql = require('mysql');
const con = mysql.createConnection({
  host: '你的数据库主机',
  user: '数据库用户名',
  password: '数据库密码',
  database: '目标数据库名',
  // 添加自定义类型转换逻辑
  typeCast: function (field, next) {
    // 检测当前字段是否为MySQL的JSON类型
    if (field.type === 'JSON') {
      // 解析字段值为JSON对象,注意处理NULL情况
      const value = field.string();
      return value ? JSON.parse(value) : null;
    }
    // 其他类型保持默认处理逻辑
    return next();
  }
});

// 查询代码照旧
con.query("select * from TEST where id=?", [req.params.id], function (err, results) {
  if (err) throw err;
  console.log(results);
  // 此时`package`已经是JSON对象了
});

这个方案的好处是不用换包,但需要自己维护类型转换的逻辑,比如如果后续有特殊的JSON解析需求,还能在这里扩展。

另外提个小细节:你示例里结果字段是package,但表结构里写的是attribute,应该是笔误吧?不管是哪个字段,上面的方案都能自动识别并解析MySQL的JSON类型字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:46