我对nodejs相对较新,在解析Json post请求时遇到了问题。
以下是帖子请求的JSON格式:
{"parameters":{"issuerId":[96409],"source":["'XYZ'"]}}
这是我的代码来阅读它。
function getSearchData(req, res, next) {
console.log("req is" + req.body);
try {
JSON.parse(reqJSON);
} catch (e) {
console.log(e);
}
}
这种解析工作正常,我能够解析它并做我的进一步逻辑。但是,如果我更改了post请求的格式(带有其他新行的相同请求),则无法解析,因为它会在请求中添加额外的逗号代替每个新行。
{
"parameters": {
"issuerId": [96409],
"source":["'XYZ'"]
}
}
这里是第二个请求代码的输出。
req is{,"parameters":{"id":[96409],,"source":["'XYZ'"]}}
[SyntaxError: Unexpected token ,]
如果您注意到,每个新行都会添加一个额外的逗号,这在开始的请求中从未出现过。
我在这里做错了什么?
答案 0 :(得分:0)
除非您自己连接请求正文流,否则您永远不必自己解析JSON。
提示1:你使用像Express这样的框架吗?你使用身体解析器吗?
提示2:如何创建JSON?
提示3:您使用的是正确的内容类型吗?
提示4:如何从请求流中创建req.body
?
您没有包含整个代码,因此无法为您提供具体的解决方案。
我在这里做错了什么?
无论你在这里做错什么,它都没有包含在问题中。
但是,如果我更改我的帖子请求格式(带有其他新行的相同请求)
如果您包含有关如何执行此操作的更多详细信息,那将非常有用。
我看到了这个问题的两个潜在来源:
您没有向我们展示这两个部分中的任何一个 - 您没有显示序列化代码和发送数据的代码,并且您没有包含获取数据的代码,可能是从块和解析JSON。但问题可能出在其中一个部分。
以下是如何使用Express执行所需操作的示例。您没有回答是否使用任何类似Express的框架,但我认为如果没有它就无法完成那个简单的任务,那么这是一个有效的例子:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
function getSearchData(req, res, next) {
console.log('req body is', req.body);
console.log('req body JSON is', JSON.stringify(req.body));
res.json({ ok: true });
}
app.use(bodyParser.json());
app.use(getSearchData);
app.listen(3335, () => console.log('Listening on http://localhost:3335/'));
它展示了如何正确地将已解析的JSON请求体作为对象req.body
获取,如何将数据打印为标准的console.log表示并再次序列化为JSON。了解它的工作原理并与您自己的解决方案进行比较。这就是我所能做的,因为没有看到你的整个解决方案,我不能告诉你更多我已经给出的提示。