语法错误:JSON.parse(<匿名>)遇到意外的JSON输入结尾。

4

我在使用nodejs中的https.get()调用API来获取一些信息并在网页上显示,但是当我试图将响应解析为JSON并在控制台上输出时会出现以下错误:

SyntaxError: JSON输入不完整 at JSON.parse () at IncomingMessage. (C:\Users\Hardik Aggarwal\Desktop\RSC\app.js:17:33) at IncomingMessage.emit (events.js:315:20) at addChunk (_stream_readable.js:295:12) at readableAddChunk (_stream_readable.js:271:9) at IncomingMessage.Readable.push (_stream_readable.js:212:10)
at HTTPParser.parserOnBody (_http_common.js:132:24) at TLSSocket.socketOnData (_http_client.js:469:22) at TLSSocket.emit (events.js:315:20) at addChunk (_stream_readable.js:295:12)

访问的URL以正确的JSON格式返回数据。唯一的问题是JSON.parse()无法处理该数据。代码如下:

app.get("/", function(req, res){
    https.get(url, "JSON", function(response){
        response.on("data", function(data){
            const currency=JSON.parse(data);
            console.log(currency);
        })
    })

    res.render("index");
})
1个回答

8
当您使用“data”事件时,意味着您将响应视为流,不能保证一次会发送所有数据。因此,在“data”事件中,应收集所有块,并在“end”事件中尝试解析数据。另外,不要忘记检查response.statusCode是否有错误。 请尝试以下操作:
app.get("/", function(req, res){

https.get(url, "JSON", function(response){
    var data;
    response.on("data", function(chunk) {
      if (!data) {
        data = chunk;
      } else {
        data += chunk;
      }
    });

    response.on("end", function() {
        const currency=JSON.parse(data);
        console.log(currency);
        res.render("index");
    });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接