javascript - 有没有比将分块输入附加到字符串并随后在其上运行 `JSON.parse()` 更好的方法来接受 JSON 数据?

标签 javascript json node.js post

在 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。您确实有可能想要查看的选项。

  1. JSONStream - 我不太确定它是如何处理解析错误的,但它非常适合大型 JSON 输入。

  2. json-scrape - 这在过滤掉非 JSON 的错误输入方面确实做得很好。

希望此信息对某些人有所帮助。

关于javascript - 有没有比将分块输入附加到字符串并随后在其上运行 `JSON.parse()` 更好的方法来接受 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888765/

相关文章:

javascript - 无法从nodejs + node-mysql 中的模块获取返回

javascript replaceChild 不起作用

javascript - 在 Javascript 中解码从 PHP 检索的 json 对象

json - 使用 json 数据自动完成建议和搜索

javascript - 将 JsonArray 数据从 serveResource 传递到 jsp 并在 JSP 上显示 - Liferay

arrays - 使用 Javascript/Node JS 从数组中删除单引号

javascript - JSHint 错误 Don't make functions within a loop

javascript - lodash.throttle - 未调用 throttle 方法?

javascript - Ajax 高分安全

node.js - 我该如何解决这个问题,res.json 不是一个函数