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

MariaDB JSON字段查询返回转义引号结果,求正确解析方式

问题分析与解决方法

1. 关于JSON_EXTRACT返回结果的转义问题

你看到的{"name":"string"}是HTML转义后的显示结果,并非JSON_EXTRACT本身的输出错误:

  • phpMyAdmin为了避免HTML注入风险,会自动将输出中的双引号(")转义为HTML实体",数据库实际返回的原始数据是正常的{"name":"string"}。你可以直接在MariaDB命令行执行查询语句验证,就能看到未转义的原始JSON字符串。
  • 即便字段是longtext类型(而非MariaDB原生JSON类型),只要存储的是合法JSON格式字符串,JSON_EXTRACT就能正确解析。

2. Sequelize中的正确处理方式

针对你的场景,有两种高效的处理方案:

方式一:用Sequelize的JSON类型自动映射

在定义模型时,将该字段指定为DataTypes.JSON,Sequelize会自动完成JSON字符串的解析与序列化:

const YourModel = sequelize.define('YourModel', {
  field: {
    type: DataTypes.JSON,
    allowNull: true
  }
});

查询数据时,Sequelize会直接把数据库中的JSON字符串解析为JavaScript对象,无需手动调用JSON_EXTRACT。

方式二:手动解析(保留longtext类型时)

如果必须使用longtext类型存储,可通过以下两种方式处理:

  • 直接查询字段值后在Node.js中手动解析:
const result = await YourModel.findOne({ attributes: ['field'] });
const parsedData = JSON.parse(result.field);
  • 结合JSON_EXTRACT查询后再解析:
const result = await sequelize.query(
  'SELECT JSON_EXTRACT(field, "$") AS parsed_field FROM your_table WHERE id = :id',
  { replacements: { id: 1 }, type: QueryTypes.SELECT }
);
const parsedData = JSON.parse(result[0].parsed_field);

关键注意事项

  • 必须保证数据库中存储的是合法JSON格式字符串,否则解析过程会抛出错误。
  • 若使用MariaDB原生JSON类型(而非longtext),Sequelize的DataTypes.JSON会提供更好的适配性,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:46:22