JSON.parse解析MySQL返回的JSON字符串无效,求解决方案
解决MySQL查询返回的JSON字符串转原生JSON数组问题
方法1:修改MySQL查询语句,使用JSON_UNQUOTE包裹聚合结果
你的查询用了JSON_ARRAYAGG和JSON_OBJECT,默认返回的JSON类型可能被客户端驱动转义成字符串。可以在聚合函数外层加上JSON_UNQUOTE,让返回的结果直接是不带转义的原生JSON结构:
SELECT JSON_UNQUOTE(JSON_ARRAYAGG(JSON_OBJECT('id', id, 'name', name))) AS products FROM your_table WHERE ...;
方法2:在DAO层单独解析products字段
你之前解析整个查询结果无效,是因为products是结果对象中的单个字符串属性,需要单独对它做JSON.parse处理。在productsDao.js中拿到查询结果后,遍历处理每个条目:
// productsDao.js 示例代码 async function getProducts() { const [rows] = await connection.query('你的查询语句'); // 遍历结果,解析products字段 return rows.map(row => ({ ...row, products: JSON.parse(row.products) })); }
方法3:配置MySQL驱动自动解析JSON类型
如果使用mysql2驱动,可以在创建连接时开启json选项,驱动会自动将MySQL返回的JSON类型字段解析为JS原生数组/对象,无需手动处理:
// 连接配置示例 const mysql = require('mysql2/promise'); const connection = await mysql.createConnection({ host: '你的主机', user: '用户名', password: '密码', database: '数据库名', json: true // 开启自动JSON解析 });
内容的提问来源于stack exchange,提问作者ggyoE
相关产品推荐
相关产品推荐

