Android JSON对象获取

时间:2018-07-17 16:24:39

标签: java android json android-json

我从此api获取数据时遇到问题。我可以请求数据的第一部分,但是在“引号”之后,我无法获取数据,因此需要获取价格。

JSON示例

{
"data": {
    "1": {
        "id": 1, 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "website_slug": "bitcoin", 
        "rank": 1, 
        "circulating_supply": 17008162.0, 
        "total_supply": 17008162.0, 
        "max_supply": 21000000.0, 
        "quotes": {
            "USD": {
                "price": 9024.09, 
                "volume_24h": 8765400000.0, 
                "market_cap": 153483184623.0, 
                "percent_change_1h": -2.31, 
                "percent_change_24h": -4.18, 
                "percent_change_7d": -0.47
            }
        }, 
        "last_updated": 1525137271
    }, 

请求代码

try {

    JSONObject jsonObject = response.getJSONObject("data");
    JSONArray jsonArray = jsonObject.names();
    Log.e(TAG,jsonArray.toString());
    for(int i=0;i<jsonArray.length();i++){

        JSONObject getObjectFromJsonArray=jsonObject.getJSONObject(jsonArray.getString(i));
        CoinMarketAPI coin=new CoinMarketAPI();

        coin.setId(getObjectFromJsonArray.getString("id"));
        coin.setName(getObjectFromJsonArray.getString("name"));
        coin.setSymbol(getObjectFromJsonArray.getString("symbol"));
        coin.setWebsite_slug(getObjectFromJsonArray.getString("website_slug"));
        coin.setRank(getObjectFromJsonArray.getString("rank"));
        coin.setCirculating_supply(getObjectFromJsonArray.getString("circulating_supply"));
        coin.setTotal_supply(getObjectFromJsonArray.getString("total_supply"));
        coin.setQuotes(getObjectFromJsonArray.getString("quotes"));

        if (jsonObject.has("price")){coin.setPrice(getObjectFromJsonArray.getString("price"));
        }else{
            Log.d(TAG, "No price");
        }

        firstlist.add(coin);
    }
}

注意

我将硬币放入if语句中,以查看发生的日志输出为“无价”

所以由于某种原因,我的代码认为价格中没有数据?

1 个答案:

答案 0 :(得分:0)

您没有正确寻找“价格”。您的if语句在“数据”下查找价格,而在“美元”下查找价格。

您应该改为执行类似的操作

JSONObject usd = getObjectFromJsonArray.getJSONObject("quotes").getJSONObject("USD");

if (usd.has("price")){
    coin.setPrice(usd.getDouble("price"));
}else{
    Log.d(TAG, "No price");
}