我正在尝试通过 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/