Javascript JSON字符串上的JSON解析抛出“无法将对象转换为基元值”
server.js 使用body解析器中间件、Handlebar和express 路线 客户 当记录req.body时,我得到一个JSON字符串 {{满意:文本1,改进:文本2,评分:0.7}:} 我试着把这个字符串解析成一个对象。当我这样做时,我会收到此错误消息 那么如何将字符串解析为对象呢 通常我会执行JSON.parsereq.body。数据类型并没有说明要发送什么类型的数据,而是说明希望得到什么类型的响应。您需要说您正在通过ajax调用中的contentType:application/JSON发送JSON。详情请参阅。到目前为止,您不是第一个或唯一一个被数据类型命名绊倒的人 这是问题的一半。另一半请参见。数据类型没有说明要发送什么类型的数据,而是说明您希望得到什么类型的响应。您需要说您正在通过ajax调用中的contentType:application/JSON发送JSON。详情请参阅。到目前为止,您不是第一个或唯一一个被数据类型命名绊倒的人 这是问题的一半。另一半请参见。因为您使用的是主体解析器中间件,所以不必再次解析req.body,因为主体解析器已经解析了它 范例 如果你用 app.usebodyParser.json 那你就得这么做Javascript JSON字符串上的JSON解析抛出“无法将对象转换为基元值”,javascript,json,node.js,Javascript,Json,Node.js,server.js 使用body解析器中间件、Handlebar和express 路线 客户 当记录req.body时,我得到一个JSON字符串 {{满意:文本1,改进:文本2,评分:0.7}:} 我试着把这个字符串解析成一个对象。当我这样做时,我会收到此错误消息 那么如何将字符串解析为对象呢 通常我会执行JSON.parsereq.body。数据类型并没有说明要发送什么类型的数据,而是说明希望得到什么类型的响应。您需要说您正在通过ajax调用中的contentType:application/
module.exports = function (app) {
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = req.body; // this is already parsed and is an object
res.send({});
});
};
正如@T.J.Crowder所指出的,您还应该发送正确的contentType,以便主体解析器知道其json
function submitData() { // Send a data object to the server
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({
satisfactory: "text 1",
improvement: "text 2",
rating: 0.7
})
}).done(function () {
$(location).attr('href', '/sendOff');
}).fail(function () {
});
}
因为您使用的是主体解析器中间件,所以不必再次解析req.body,因为主体解析器已经解析了它
范例
如果你用
app.usebodyParser.json
那你就得这么做
module.exports = function (app) {
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = req.body; // this is already parsed and is an object
res.send({});
});
};
正如@T.J.Crowder所指出的,您还应该发送正确的contentType,以便主体解析器知道其json
function submitData() { // Send a data object to the server
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({
satisfactory: "text 1",
improvement: "text 2",
rating: 0.7
})
}).done(function () {
$(location).attr('href', '/sendOff');
}).fail(function () {
});
}
您需要设置正确的contentType:
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({ satisfactory: "text 1", rating: 0.7 })
});
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = JSON.parse(req.body);
console.log(data.rating); // 0.7
res.send(data);
});
此外,使用body parser,您可以避免在服务器端调用JSON.parse。您需要设置正确的contentType:
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({ satisfactory: "text 1", rating: 0.7 })
});
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = JSON.parse(req.body);
console.log(data.rating); // 0.7
res.send(data);
});
此外,使用body parser,您可以避免在服务器端调用JSON.parse。当记录req.body时,我会得到一个JSON字符串,在我看来它不像JSON字符串。它看起来像是带有JSON的东西,但开头的{不是JSON,结尾看起来很奇怪。@t.J.Crowder它是一个{:}格式的字符串,即一个完整的JSON文档作为另一个JSON文档的键,但您不能选择在JSON中使用,因此外部文档无效。@meagar:属性名和其他字符串在JSON中总是双引号。Edit:啊,您编辑过。:-由于OP使用的是JSON.stringify,我们知道它不会有单引号字符串…当记录r时eq.body我得到一个JSON字符串,它在我看来不像JSON字符串。它看起来像是包含JSON的东西,但开头的{不是JSON,结尾看起来很奇怪。@t.J.Crowder它是一个{:}形式的字符串,即一个完整的JSON文档作为另一个JSON文档的键,但您不能选择在JSON中使用,因此外部文档无效。@meagar:属性名和其他字符串在JSON中总是双引号。Edit:啊,您编辑过。:-由于OP使用的是JSON.stringify,我们知道它不会有单引号字符串…很好。Th这是问题的另一半,前一半是。好的观点。这是问题的另一半,前一半是。但我没有提到主体解析器中间件…这非常重要,但我没有提到主体解析器中间件…这非常重要