我正在尝试通过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}]"
}
]
如您所见,每个引号前都有反斜杠,但我不希望该反斜杠,该怎么办?谢谢
答案 0 :(得分:1)
代替询问如何删除反斜杠,您应该首先找出其原因。
在这里是因为您使用了双重编码。
materie
的内容已经是JSON,但是您再次对整个内容进行编码,因此结果只有一个带有大字符串的字段materie
。
基本上会发生什么:
res.json([{materie: "your mysql json result stringified"]);
IMO,在MySQL中使用JSON不是一个好主意。使用字段和本地内容进行输入和编码更安全。
解决方案:
要么重新制作数据库内容,使其不与JSON内容一起使用,要么在发送数据到响应之前根本不进行双重编码。因此,使用res.json();
而不是res.send();
以及适当的附加标题(Content-Type
,..)。