在 Node.js 中,是否有比将分块输入附加到字符串并随后运行 JSON.parse()
更好的方法来接受 JSON 数据?服务器无法假定 JSON 输入有效,JSON.parse()
是我所知道的验证 JSON 数据的唯一方法。
假设以下服务器接受:
- 仅 POST 请求
- 仅 JSON 数据
- 只有
Content-Type
header 为"application/json"
.
var server = http.createServer(function(req, res) {
....
var parsedData;
var inputData = '';
req.on('data', function(chunk) {
inputData += chunk;
});
req.on('end', function() {
parsedData = JSON.parse(inputData);
}
....
}
如果我如此严格地执行输入数据,简单地将此数据附加到一个字符串然后 JSON.parse()
它似乎很奇怪,本质上(假设输入了正确的 JSON)将 JSON -> 字符串 -> JSON
。 (当然,不能假设数据是有效的。)
最佳答案
你做的真的很好。但是,性能调整可能只是将每个 block 添加到一个数组,然后加入该数组,而不是每次都创建一个新字符串。
例如
var inputData = [];
var parsedData;
req.on('data', function(chunk{
inputData.push(chunk); //assuming chunk is from utf-8 stream, if not call chunk.toString()
});
req.on('end', function(){
try {
parsedData = JSON.parse(inputData.join(''));
} catch (err) {
//handle error
}
});
这样您就不会每次使用 inputData += chunk
重新分配和创建新字符串。请注意,这对于预期的小输入来说很好,因为 V8 很好地优化了这种情况。
现在,注意错误的 JSON。您确实有可能想要查看的选项。
JSONStream - 我不太确定它是如何处理解析错误的,但它非常适合大型 JSON 输入。
json-scrape - 这在过滤掉非 JSON 的错误输入方面确实做得很好。
希望此信息对某些人有所帮助。
关于javascript - 有没有比将分块输入附加到字符串并随后在其上运行 `JSON.parse()` 更好的方法来接受 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888765/