簡體   English   中英

如何解析以下 JSON

[英]How to parse the following JSON

在這里,我從本地資產文件夾中獲取以下 JSON。 所有 JSON 對象的名稱都不同。 第 1、3、5、7 行 .... 最多 1000 行。特此附上 json 供您參考。

     {
    "status": {
        "rcode": 200,
        "message": "OK"
    },
    "data": {
        "0": {
            "OutletName": "Test 1 ",
            "Latitude": "16.123234",
            "Longitude": "79.546745"
        },
        "1": {
            "OutletName": "Test 2",
            "Latitude": "16.343234",
            "Longitude": "79.786745"
        },
        "2": {
            "OutletName": "Test 3",
            "Latitude": "19.1294",
            "Longitude": "72.836122"
        },
        "3": {
            "OutletName": "Test 4",
            "Latitude": "19.136383",
            "Longitude": "72.827997"
        },
        "6": {
            "OutletName": "Test 5",
            "Latitude": "19.136715",
            "Longitude": "72.829248"
        },
        "7": {
            "OutletName": "Test 6",
            "Latitude": "19.128483",
            "Longitude": "72.821199"
        },
        "8": {
            "OutletName": "Test 7",
            "Latitude": "19.128528",
            "Longitude": "72.819388"
        },
        "10": {
            "OutletName": "Test 8",
            "Latitude": "19.140333",
            "Longitude": "72.831095"
        },
        "11": {
            "OutletName": "Test 9",
            "Latitude": "19.14027",
            "Longitude": "72.826285"
        }
    }
}

這里的對象名稱對所有人來說都是不同的。 所以我嘗試這樣

private void parseJson() {
        try {
            JSONObject obj = new JSONObject(loadJSONFromAsset());
            JSONObject jObj = obj.getJSONObject("data");
            System.out.println("jObj.length()==> " + jObj.length());
            for (int i = 0; i < jObj.length(); i++) {

                if (jObj.has(String.valueOf(i)) && !jObj.isNull(String.valueOf(i))) {
                    JSONObject jObj1 = jObj.getJSONObject(String.valueOf(i));
                    System.out.println("Index==> "+i);
                    System.out.println("OutletName==> "+jObj1.getString("OutletName"));
                  }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

但在這里我沒有得到所有的數據。 請幫我解析這種 JSON。

提前致謝。

您需要像這樣使用keys方法:

private void parseJson() {
    try {
        JSONObject obj = new JSONObject(loadJSONFromAsset());
        JSONObject jObj = obj.getJSONObject("data");
        Iterator iter = jObj.keys()
        while(iter.hasNext()) {
            String key = (String) iter.next();
            JSONObject jObj1 = jObj.getJSONObject(key);
            System.out.println("Index==> "+ key);
            System.out.println("OutletName==> "+jObj1.getString("OutletName"));
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

編輯:修復了一些類型轉換

JSON 中“數據”的值不是數組,因此您無法直接對其進行迭代。 您需要首先將其轉換為 HashMap,然后遍歷鍵集。 您可以使用Jackson 庫將 JSONObject 轉換為 HashMap。 您也可以參考此答案轉換為地圖。

首先,您必須對 json 響應進行更改

 {
    "status": {
        "rcode": 200,
        "message": "OK"
    },
    "data": {                   //this has to be array in your json

        "0": {                            //  and these are object inside the arrays
            "OutletName": "Test 1 ",
            "Latitude": "16.123234",
            "Longitude": "79.546745"
        },
        "1": {                                    //  and these are object inside the arrays
            "OutletName": "Test 2",
            "Latitude": "16.343234",
            "Longitude": "79.786745"
        },
        "2": {
            "OutletName": "Test 3",
            "Latitude": "19.1294",
            "Longitude": "72.836122"
        },
        "3": {
            "OutletName": "Test 4",
            "Latitude": "19.136383",
            "Longitude": "72.827997"
        },
        "6": {
            "OutletName": "Test 5",
            "Latitude": "19.136715",
            "Longitude": "72.829248"
        },
        "7": {
            "OutletName": "Test 6",
            "Latitude": "19.128483",
            "Longitude": "72.821199"
        },
        "8": {
            "OutletName": "Test 7",
            "Latitude": "19.128528",
            "Longitude": "72.819388"
        },
        "10": {
            "OutletName": "Test 8",
            "Latitude": "19.140333",
            "Longitude": "72.831095"
        },
        "11": {
            "OutletName": "Test 9",
            "Latitude": "19.14027",
            "Longitude": "72.826285"
        }
    }
}

並且不要超過 json 對象的大小來訪問它的對象它必須是 JSONArray 像這樣獲取 JSONArray 中的數組數據

JSONArray dataArray = response_obj.getJSONArray("data");

然后像這樣迭代

for (int i = 0; i < dataArray.length(); i++) 
{
   //write your code here to access all the object as for loop executes on by one
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM