解析nodeJS中的Coinmarketcap JSON数组

时间:2017-05-30 16:59:57

标签: javascript node.js

我正在开发一个显示一些加密货币的网站。一些  其中我来自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等?

1 个答案:

答案 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);
        }
    });
});