SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束

Posted

技术标签:

【中文标题】SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束【英文标题】:SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) 【发布时间】:2020-10-05 17:50:13 【问题描述】:

我正在使用 API 获取一些信息,以便在 nodejs 中使用 https.get() 显示在我的网页上。但是当我尝试通过将响应解析为 JSON 来控制台记录响应时,会显示此错误

SyntaxError:JSON 输入意外结束 在 JSON.parse() 在传入消息。 (C:\Users\Hardik Aggarwal\Desktop\RSC\app.js:17:33) 在 IncomingMessage.emit (events.js:315:20) 在 addChunk (_stream_readable.js:295:12) 在 readableAddChunk (_stream_readable.js:271:9) 在 IncomingMessage.Readable.push (_stream_readable.js:212:10) 在 HTTPParser.parserOnBody (_http_common.js:132:24) 在 TLSSocket.socketOnData (_http_client.js:469:22) 在 TLSSocket.emit (events.js:315:20) 在 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】:

当您使用“数据”事件时,这意味着您将响应视为一个流,并且不能保证它会在一个块中发送所有数据。因此,在“数据”事件中,您应该收集所有块,在“结束”事件中,您应该尝试解析数据。另外,不要忘记检查 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");
    );
);

【讨论】:

以上是关于SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError:JSON.parse:JSON 的第 1 行第 2 列出现意外字符

SyntaxError:JSON.parse:意外字符在我的控制台中?

我在使用 JSON.parse 时收到“SyntaxError: Unexpected token ' in JSON at position 1”

未捕获的 SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束

DiscordJS + NodeJS:SyntaxError:JSON.parse 处的 JSON 输入意外结束(<anonymous>)

SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束