【问题标题】:SyntaxError: Unexpected end of JSON input (Node.js)SyntaxError:JSON 输入意外结束 (Node.js)
【发布时间】:2020-08-24 03:28:17
【问题描述】:

我是一名新开发人员,正在学习如何使用 API,我已经遇到过几次这个错误,导致 Node 不断崩溃:

SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/Users/SA/Desktop/pokeApp/app.js:13:34)
    at IncomingMessage.emit (events.js:314:20)
    at IncomingMessage.Readable.read (_stream_readable.js:513:10)
    at flow (_stream_readable.js:986:34)
    at resume_ (_stream_readable.js:967:3)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)

我不确定如何解决它或问题到底是什么...我的 JS 代码如下所示:

const express = require("express");
const https = require("https");

const app = express();

app.get("/", (req,res) => {
    const url = "https://pokeapi.co/api/v2/pokemon/1/";

    https.get(url, function(response){
        console.log(response.statusCode);

        response.on("data", (data) =>{
            const pokemon = JSON.parse(data);
            console.log(pokemon);
        })
    })

    res.send("server running");
})

app.listen(3000, () => {
    console.log("Port 3000");
})

这与我用于 weatherAPI 的设置基本相同,没有任何问题。 我还用 JSON lint 检查了 JSON,看看是否有任何问题,并且恢复正常。

【问题讨论】:

    标签: javascript json api syntax


    【解决方案1】:

    您需要等待完整的回复进来 - 这是一个large file,所以它可能不会一下子全部进来:

    https.get(url, function(response){
        let result = '';
        response.on("data", (data) =>{
            result += data;
        });
        response.on('end', () => {
            const pokemon = JSON.parse(result);
            console.log(pokemon);
        });
    })
    

    【讨论】:

    • 谢谢!这行得通。只是一个问题,为什么将第一个 response.on 中的数据添加到一个空字符串允许我在响应“结束”时解析 JSON?我曾尝试过 JSON.stringify() 方法,但效果不一样。
    • data 事件会触发多次,而不仅仅是一次,因为有效负载很大,因此通过将所有data 连接在一起,最后可以是JSON.parsed 跨度>
    • 太棒了!这现在更有意义了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2021-05-01
    • 2018-08-24
    • 1970-01-01
    • 2017-04-20
    • 2020-12-05
    • 2022-01-20
    相关资源
    最近更新 更多