如何在Node.js MySQL中获取JSON类型而非字符串结果
当然有办法搞定这个问题!不用手动遍历结果做JSON.parse的话,有两个实用方案,看你需求选:
方案1:改用mysql2包(首推)
mysql2是老牌mysql包的升级版,原生就支持自动解析MySQL的JSON类型字段,几乎不需要改动现有代码,省心又靠谱。
步骤很简单:
- 先安装
mysql2:
npm install mysql2
- 替换你的连接代码(查询逻辑完全不用改):
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
相关产品推荐
相关产品推荐

