尝试提取数据时与API的差异

时间:2018-04-23 05:28:58

标签: javascript jquery api

我在使用Jquery从学校项目的API中提取一些数据时遇到了困难。

如果我使用以下coinmaketcap API,我会收到以下回复

  

https://api.coinmarketcap.com/v1/ticker/bitcoin/

[
{
    "id": "bitcoin", 
    "name": "Bitcoin", 
    "symbol": "BTC", 
    "rank": "1", 
    "price_usd": "8854.92", 
    "price_btc": "1.0", 
    "24h_volume_usd": "6759730000.0", 
    "market_cap_usd": "150480289107", 
    "available_supply": "16993975.0", 
    "total_supply": "16993975.0", 
    "max_supply": "21000000.0", 
    "percent_change_1h": "-0.13", 
    "percent_change_24h": "0.12", 
    "percent_change_7d": "8.3", 
    "last_updated": "1524459272"
}
]

我能够获得比特币的符号并使用此代码将其放入变量

> $.getJSON('https://api.coinmarketcap.com/v1/ticker/btc/',
> function(data){                   
>               var symbol   = (data[0].symbol)
>      })

一旦我拥有它,我可以把它放在div中。

然而,当我使用cryptocompare API时,我没有得到任何回报

  

https://min-api.cryptocompare.com/data/coin/generalinfo?fsyms=BTC,&tsym=USD

 $.getJSON('https://min-api.cryptocompare.com/data/coin/generalinfo?fsyms=BTC&tsym=USD', function(data){
                    var symbol     = (data[0].Internal)
                           });

这是回复 -

{
"Message": "Success",
"Type": 100,
"Data": [
    {
        "CoinInfo": {
            "Id": "1182",
            "Name": "BTC",
            "FullName": "Bitcoin",
            "Internal": "BTC",
            "ImageUrl": "/media/19633/btc.png",
            "Url": "/coins/btc/overview",
            "Algorithm": "SHA256",
            "ProofType": "PoW",
            "NetHashesPerSecond": 27483320229.3688,
            "BlockNumber": 518932,
            "BlockTime": 600,
            "BlockReward": 12.5,
            "Type": 1,
            "DocumentType": "Webpagecoinp"
        },
        "ConversionInfo": {
            "Conversion": "direct",
            "ConversionSymbol": "",
            "CurrencyFrom": "BTC",
            "CurrencyTo": "USD",
            "Market": "CCCAGG",
            "Supply": 16986575,
            "TotalVolume24H": 380849.0498955779,
            "SubBase": "5~",
            "SubsNeeded": [
                "5~CCCAGG~BTC~USD"
            ],
            "RAW": [
                "5~CCCAGG~BTC~USD~4~8875.23~1524460635~0.00477012~42.152119404000004~231254719~10820.885574747872~96327075.76938197~66326.58563159907~593473019.8524572~8823.46~8917.05~8804.2~8864.31~9065~8780.91~Bitfinex~7ffe9"
            ]
        }
    }
]

}

为什么第二段代码不起作用?请帮忙!

2 个答案:

答案 0 :(得分:2)

第二个API返回一个对象(采用JSON格式),而不是一个数组 - 看看第一个字符是{以及它是如何拥有键和值的?您需要访问相应的属性才能获得所需的值。 [0]表示法表示您正在尝试访问数组的第一个元素,但在这种情况下外部对象不是数组。

$.getJSON('https://min-api.cryptocompare.com/data/coin/generalinfo?fsyms=BTC&tsym=USD',
  function(data){
    var symbol = data.Data[0].CoinInfo.Internal;
  });

答案 1 :(得分:2)

在这两种情况下,我们都会以不同的形式获取数据。所以,要获得“BTC”#39;在变量中。

对于第一种情况 - > symbol = data [0] [' symbol']

对于第二种情况 - > symbol = 数据['数据'] [0] [' CoinInfo'] ['内部']

一个是[ JSON 的数组],而另一个是[对象,具有键'数据'数组值]。