我正在开发一个显示一些加密货币的网站。一些 其中我来自Coinmarkepcap API(https://api.coinmarketcap.com/v1/ticker/)。
我正在使用的nodeJS代码如下:
var https = require('https');
var optionsget = {
host : 'api.coinmarketcap.com',
port : 443,
path : '/v1/ticker/bitcoin',
method : 'GET'
};
var reqGet = https.request(optionsget, function(res) {
res.on('data', function(d) {
info = JSON.parse(d);
console.log(info);
});
});
reqGet.end();
reqGet.on('error', function(e) {
console.error(e);
});
API返回以下数据:
[
{
"id": "bitcoin",
"name": "Bitcoin",
"symbol": "BTC",
"rank": "1",
"price_usd": "2256.82",
"price_btc": "1.0",
...
"last_updated": "1496168353"
},
{
"id": "ethereum",
"name": "Ethereum",
"symbol": "ETH",
"rank": "2",
"price_usd": "204.307",
"price_btc": "0.0902657",
...
"last_updated": "1496168366"
},
我收到以下错误:
SyntaxError: Unexpected token < in JSON at position 0
我注意到API的结果是使用带有JSON的括号[]。
如何解析JSON数组,以便检索每个硬币的名称,价格,ID等?
答案 0 :(得分:1)
您必须替换:
var optionsget = {
host : 'api.coinmarketcap.com',
port : 443,
path : '/v1/ticker/bitcoin',
method : 'GET'
};
由:
var optionsget = {
host : 'api.coinmarketcap.com',
port : 443,
path : '/v1/ticker/bitcoin/',
method : 'GET'
};
如果您不包含尾部斜杠,网站会将您重定向到带有斜杠的URL,并且https.request不会透明地处理重定向。
您应该检查回调中的HTTP状态代码(check the docs):
var reqGet = https.request(optionsget, function(res) {
res.on('data', function(d) {
if(res.statusCode == 200) {
info = JSON.parse(d);
console.log(info);
} else {
/* Do something else */
console.log("!", res.statusCode);
}
});
});