#javascript #json #api #syntax
#javascript #json #API #синтаксис
Вопрос:
Я новый разработчик, изучающий, как работать с API, и я уже несколько раз сталкивался с этой ошибкой, которая продолжает приводить к сбою узла:
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 с помощью JSON lint, чтобы увидеть, были ли какие-либо проблемы, и все вернулось в порядке.
Ответ №1:
Вам нужно дождаться получения полного ответа — это большой файл, поэтому он может прийти не весь сразу:
https.get(url, function(response){
let result = '';
response.on("data", (data) =>{
result = data;
});
response.on('end', () => {
const pokemon = JSON.parse(result);
console.log(pokemon);
});
})
Комментарии:
1. Спасибо! Это сработало. Просто вопрос, почему добавление данных в первом ответе.on в пустую строку позволило мне проанализировать JSON, когда ответ «заканчивается»? Я пробовал метод JSON.stringify(), но он работал по-другому.
2.
data
Событие запускается несколько раз, а не только один раз, поскольку полезная нагрузка большая, поэтому, объединив всеdata
вместе, оно может бытьJSON.parse
общим в конце3. отлично! теперь это имеет гораздо больше смысла.