mysql - node-mysql res.json(rows) 返回带反斜杠的引号

标签 mysql node.js json

我正在尝试通过 node-mysql 模块从 Node.js 应用程序中的 Mysql 获取 JSON 类型的数据。

运行这段代码:

router.get('/getmatdom', function (req, res) {
 Materie.getmateriedomande(function(err,rows){
    if(err) {
        res.status(400).json(err);
    }
    else
    {
        res.json(rows);
    }
 });
});

getmateriedomande: function(callback)
{
    return db.query('select json_arrayagg(json_object(\'name\', m.name, \'domande\', '+
    '(select json_arrayagg(json_object(\'domanda\', d.name)) '+
    'from domande as d where d.materia = m.id ))) as materie from materie m', callback);
}

结果是:

[
{
    "materie": "[{\"name\": \"Psicologia dell'apprendimento\", \"domande\": [{\"domanda\": \"Il 'Me' si riferisce a:\"}, {\"domanda\": \"I rinforzi negativi:\"}]}, {\"name\": \"Teoria e metodi di progettazione e valutazione didattica\", \"domande\": null}, {\"name\": \"Didattica speciale\", \"domande\": null}]"
}

]

如您所见,每个引号前都有反斜杠,但我不想要那个反斜杠,我该怎么做?谢谢

最佳答案

与其问如何删除反斜杠,不如先找出反斜杠存在的原因。

它在那里是因为你有双重编码。

materie 的内容已经是 JSON,但您再次对整个内容进行编码,因此结果您只有一个带有大字符串的字段 materie

基本上是这样的:

res.json([{materie: "your mysql json result stringified"]);

IMO,在 MySQL 中使用 JSON 不是一个好主意。使用字段和 native 内容对于键入和编码来说更安全。

解决方法:

要么重新制作您的数据库内容使其无法与 JSON 内容一起使用,要么在将数据发送到您的响应之前不进行双重编码。因此,不要使用 res.json();,而是使用 res.send(); 和适当的附加 header (Content-Type,..)。

关于mysql - node-mysql res.json(rows) 返回带反斜杠的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421176/

相关文章:

MySQL '%y' 计算错误世纪

mysql - 如何清除 ibdata1 文件及其对性能的影响?

c# - 使用一个查询插入两个表

node.js - 最简单的 node.js + nunjucks 示例

node.js - 如何同时运行多个 npm 脚本?

node.js - 如何在 `Node aws-sdk` sendRawEmail 函数中发送 PDF 附件?

javascript - jQuery.parseJSON() 不在 Windows 服务器上解码有效的 Json 字符串

python - 如何自动修复无效的 JSON 字符串?

JAVA:MySql:连接太多

php - json php调用错误: undefined