所以我正在尝试从Web服务器检索数据(URL:https://api.uwaterloo.ca/v2/codes/subjects.json?key=6eb0182cf11ca581364ccceee87435f4)。我使用JSON验证器确保了它的有效JSON数据。
我要做的是获取数据数组中主题键的值。但是,当我第一次尝试将响应解析为JSON对象时,它并没有让我感到高兴。
以下是代码段
var req = https.request('https://api.uwaterloo.ca/v2/codes/subjects.json?key=6eb0182cf11ca581364ccceee87435f4', function(res) {
//res.setEncoding('utf8');
res.on('data', function(d) {
//console.log(Object.prototype.toString.call(d));
//jsonString = JSON.stringify(d);
//console.log(jsonString);
fs.writeFile("./test.txt", d, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
jsonObject = JSON.parse(d);
// console.log(typeof(jsonObject.count));
// for (var key in jsonObject)
// {
// if(jsonObject.hasOwnProperty(key))
// {
// console.log(key + "=" + jsonObject[key]);
// }
// }
});
});
req.end();
req.on('error', function(e) {
console.error(e);
});
我收到以下错误
^
SyntaxError: Unexpected end of input
at Object.parse (native)
at IncomingMessage.<anonymous> (C:\Users\Chintu\Desktop\Chaitanya\Study\Term
4B\MSCI 444\Project\Full Calendar\Trial\helloworld.js:79:20)
at IncomingMessage.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at IncomingMessage.Readable.push (_stream_readable.js:126:10)
at HTTPParser.parserOnBody (_http_common.js:132:22)
at TLSSocket.socketOnData (_http_client.js:310:20)
at TLSSocket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at TLSSocket.Readable.push (_stream_readable.js:126:10)
感谢任何帮助。
谢谢!
答案 0 :(得分:1)
在解析之前,您不会缓冲整个内容。 data
是为单个块发出的,可能是也可能不是整个响应。
试试这个:
var req = https.get(url, function(res) {
if (res.statusCode !== 200)
res.resume(); // discard any response data
else {
var buf = '';
res.on('data', function(d) {
buf += d;
}).on('end', function() {
var result = JSON.parse(buf);
});
}
});