JSON 请求 android 错误

JSON request android error

当从我的循环中接收到我的 json 时,它作为一个大对象出现 我该如何防止这种情况发生,有人可以指出正确的方向或文件吗?

日志....

W/System.err: org.json.JSONException: Value {"1":{"id":1,"name":"Bitcoin","symbol":"BTC","website_slug":"bitcoin","rank":1,"circulating_supply":17153487,"total_supply":17153487,"max_supply":21000000,"quotes":{"USD":{"price":6720.93,"volume_24h":4367200000,"market_cap":115287385383,"percent_change_1h":-0.09,"percent_change_24h":2.07,"percent_change_7d":3.26}},"last_updated":1531828586},"1027":{"id":1027,"name":"Ethereum","symbol":"ETH","website_slug":"ethereum","rank":2,"circulating_supply":100744923,"total_supply":100744923,"max_supply":null,"quotes":{"USD":{"price":472.777,"volume_24h":1774520000,"market_cap":47629882298,"percent_change_1h":-0.45,"percent_change_24h":0.3,"percent_change_7d":5.32}},"last_updated":1531828591},"52":{"id":52,"name":"XRP","symbol":"XRP","website_slug":"ripple","rank":3,"circulating_supply":39262444717,"total_supply":99991916481,"max_supply":100000000000,"quotes":{"USD":{"price":0.473278,"volume_24h":269811000,"market_cap":18582051311,"percent_change_1h":-0.18,"percent_change_24h":2.43,"percent_change_7d":4.17}},"last_updated":1531828571},"1831":{"id":1831,"name":"Bitcoin Cash","symbol":"BCH","website_slug":"bitcoin-cash","rank":4,"circulating_supply":17242013,"total_supply":17242013,"max_supply":21000000,"quotes":{"USD":{"price":793.963,"volume_24h":471637000,"market_cap":13689519971,"percent_change_1h":-0.47,"percent_change_24h":3.58,"percent_change_7d":12.07}},"last_updated":1531828592},"1765":{"id":1765,"name":"EOS","symbol":"EOS","website_slug":"eos","rank":5,"circulating_supply":896149492,"total_supply":900000000,"max_supply":1000000000,"quotes":{"USD":{"price":7.94815,"volume_24h":666448000,"market_cap":7122730586,"percent_change_1h":-0.29,"percent_change_24h":2.5,"percent_change_7d":6.31}},"last_updated":1531828590},"2":{"id":2,"name":"Litecoin","symbol":"LTC","website_slug":"litecoin","rank":6,"circulating_supply":57444758,"total_supply":57444758,"max_supply":84000000,"quotes":{"USD":{"price":83.7447,"volume_24h":283495000,"market_cap":4810693998,"percent_change_1h":-0.17,"percent_change_24h":1.63,"percent_change_7d":8.91}},"last_updated":1531828567},"512":{"id":512,"name":"Stellar","symbol":"XLM","website_slug":"stellar","rank":7,"circulating_supply":18766530971,"total_supply":104125061584,"max_supply":null,"quotes":{"USD":{"price":0.231804,"volume_24h":49352700,"market_cap":4350156945,"percent_change_1h":-0.94,"percent_change_24h":0.8,"percent_change_7d":17.92}},"last_updated":1531828584},"2010":{"id":2010,"name":"Cardano","symbol":"ADA","website_slug":"cardano","rank":8,"circulating_supply":25927070538,"total_supply":31112483745,"max_supply":45000000000,"quotes":{"USD":{"price":0.152682,"volume_24h":86195700,"market_cap":3958596984,"percent_change_1h":0.16,"percent_change_24h":1.2,"percent_change_7d":15.48}},"last_updated":1531828594},"1720":{"id":1720,"name":"IOTA","symbol":"MIOTA","website_slug":"iota","rank":9,"circulating_supply":2779530283,"total_supply":2779530283,"max_supply":2779530283,"quotes":{"USD":{"price":1.06608,"volume_24h":45845200,"market_cap":2963201644,"percent_change_1h":-0.49,"percent_change_24h":0.44,"percent_change_7d":8.21}},"last_updated":1531828590},"825":{"id":825,"name":"Tether","symbol":"USDT","website_slug":"tether","rank":10,"circulating_supply":2707140346,"total_supply":3080109502,"max_supply":null,"quotes":{"USD":{"price":1.00215,"volume_24h":2728850000,"market_cap":2712960697,"percent_change_1h":0.11,"percent_change_24h":0.45,"percent_change_7d":-0.16}},"last_updated":1531828588},"1958":{"id":1958,"name":"TRON","symbol":"TRX","website_slug":"tron","rank":11,"circulating_supply":65748111645,"total_supply":99000000000,"max_supply":null,"quotes":{"USD":{"price":0.0367706,"volume_24h":191259000,"market_cap":2417597514,"percent_change_1h":0.03,"percent_change_24h":1.55,"percent_change_7d":8.49}},"last_updated":1531828593},"1376":{"id":1376,"name":"NEO","symbol":"NEO","website_slug":"neo","rank":12,"circulating_supply":65000000,"total_supply":100000000,"max_supply":100000000,"quotes":{"USD":{"price":36.2949,"volume_24h":128189

这是我的请求代码

public ArrayList getCoin(){ firstlist.clear();

    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
            Constants.URL_JSON, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {


            try {

                JSONArray coinArray = response.getJSONArray("data");

                for (int i = 0; i < coinArray.length(); i++) {

                    JSONObject coinOBJ = coinArray.getJSONObject(i);
                    CoinMarketAPI coin = new CoinMarketAPI();


                   // coin.setId(coinOBJ.getString("id"));
                    //coin.setName(coinOBJ.getString("name"));
                    //coin.setSymbol(coinOBJ.getString("symbol"));
                    //coin.setWebsite_slug(coinOBJ.getString("website_slug"));
                   // coin.setRank(coinOBJ.getString("rank"));
                   // coin.setCirculating_supply(coinOBJ.getString("circulating_supply"));
                   // coin.setTotal_supply(coinOBJ.getString("total_supply"));
                   // coin.setQuotes(coinOBJ.getString("quotes"));
                   // coin.setUSD(coinOBJ.getString("USD"));
                   // coin.setPrice(coinOBJ.getString("price"));


                          Log.d(TAG, coin.getName());




                    firstlist.add(coin);


                }

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
    }, 
    "1027": {
        "id": 1027, 
        "name": "Ethereum", 
        "symbol": "ETH", 
        "website_slug": "ethereum", 
        "rank": 2, 
        "circulating_supply": 99151888.0, 
        "total_supply": 99151888.0, 
        "max_supply": null, 
        "quotes": {
            "USD": {
                "price": 642.399, 
                "volume_24h": 2871290000.0, 
                "market_cap": 63695073558.0, 
                "percent_change_1h": -3.75, 
                "percent_change_24h": -7.01, 
                "percent_change_7d": -2.32
            }
        }, 

注意 一些行被注释掉以防止进一步的错误。

我认为错误是执行 json 数组响应行但不确定如何修复它。任何帮助将不胜感激。

data 是对象,不是数组,所以你可以像这样通过迭代器循环

JSONObject coinArray = response.getJSONObject("data");
Iterator<String> iter = coinArray.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object coinOBJ = coinArray.get(key);

        CoinMarketAPI coin = new CoinMarketAPI();
        coin.setId(coinOBJ.getString("id"));
        coin.setName(coinOBJ.getString("name"));
        coin.setSymbol(coinOBJ.getString("symbol"));
        coin.setWebsite_slug(coinOBJ.getString("website_slug"));
        coin.setRank(Integer.parseInt(coinOBJ.getString("rank")));
        coin.setCirculating_supply(coinOBJ.getString("circulating_supply"));
        coin.setTotal_supply(coinOBJ.getString("total_supply"));
        coin.setQuotes(coinOBJ.getString("quotes"));
        coin.setUSD(coinOBJ.getString("USD"));
        coin.setPrice(coinOBJ.getString("price"));

        Log.d(TAG, coin.getName());
        firstlist.add(coin);
    } catch (JSONException e) {
        // Something went wrong!
    }
}

我来给你解释一下。我所做的是 "data" 是一个 Json 对象并且在其内部有多个对象。所以我通过 jsonObject.names(); 将数据转换为 Json 数组;现在我将通过 for 循环获取数据中的每个对象。

 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"));
        JSONObject qoutes = getObjectFromJsonArray.getJSONObject("quotes");
        JSONObject  USD   = qoutes.getJSONObject("USD");
        coin.setPrice(USD.getString("price"));
        firstlist.add(coin);
        }