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

时间:2019-01-29 12:33:50

标签: 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}]"
}

]

如您所见,每个引号前都有反斜杠,但我不希望该反斜杠,该怎么办?谢谢

1 个答案:

答案 0 :(得分:1)

代替询问如何删除反斜杠,您应该首先找出其原因。

在这里是因为您使用了双重编码。

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

基本上会发生什么:

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

IMO,在MySQL中使用JSON不是一个好主意。使用字段和本地内容进行输入和编码更安全。

解决方案:

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