简体   繁体   中英

Android parsing JSON with array in array

Help me parsing JSON. I parse this JSON without "moment" and don't know how parse with "moment". My JSON response:

{
"A": [
    {
        "time0_90": "20",
        "score": "0 : 0",
        "team1": "Россия",
        "team2": "Франция",
        "group": "A",
        "live": "1"
    },
    {
        "time0_90": "20",
        "score": "0 : 0",
        "team1": "Португалия",
        "team2": "Гондурас",
        "group": "A",
        "live": "0",
        "time": "18:30",
        "stadium": "",
        "referee": "судья"
    }
],
"B": [
    {
        "time0_90": "3",
        "score": "1 : 0",
        "moment": [
            {
                "class_moment": "g",
                "name1": "Халк",
                "time0_90Moment": "5",
                "team": "1"
            },
            {
                "class_moment": "sub",
                "name1": "Фред",
                "time0_90Moment": "50",
                "team": "1",
                "name2": "Жо"
            }
        ],
        "team1": "Бразилия",
        "team2": "Испания",
        "group": "B",
        "live": "1"
    }
],
"C": [],
"D": [],
"E": [],
"F": [
    {
        "time": "15:00",
        "stadium": "Маракана",
        "referee": "судья",
        "team1": "Россия",
        "team2": "Франция",
        "group": "F",
        "live": "0"
    }
],
"G": [],
"H": []
}

This code is parse response without "moment". How to parse response with "moment" and save it in array?

JSONObject jsonResponse = new JSONObject(jsonResult);
   for (int j=0; j<8; j++){
       String[] groupName = {"A", "B", "C", "D", "E", "F", "G", "H"};
   JSONArray jsonMainNode = jsonResponse.optJSONArray(groupName[j]);
   if (jsonMainNode.length() == 0){ continue;}
   else {
   for (int i = 0; i < jsonMainNode.length(); i++) {
    JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
    team1 = jsonChildNode.optString("team1");
    team2 = jsonChildNode.optString("team2");       
    group = jsonChildNode.optString("group");
    int live = jsonChildNode.getInt("live");
    String time = null;
    if (live == 1){
        time = jsonChildNode.optString("time0_90")+"'";
        score = jsonChildNode.optString("score");
        }
        else {
            score = jsonChildNode.optString("time");
            referee = jsonChildNode.optString("referee");
            time = jsonChildNode.optString("stadium");
            }

I would recommend that you use a JSON Mapping library, like Jackson or GSON , manually parsing JSON is a waste of time and effort unless it is purely for educational purposes.

Other than that I assume the correct usage would be .optJSONArray("moment") follow by an iteration with a cast of each result to JSONObject or similar? Manually doing this is just a mess. ;o

try this :

jsonArray moment = json.getJsonArray("B").getJsonObject(0).getJsonArray("moment");
String class = moment.getString("class_moment");
String name= moment.getString("name1");
String time= moment.getString("time0_90Moment");
String team= moment.getString("team");

I did it, here's the code

JSONObject jsonResponse = new JSONObject(jsonResult);
       for (int j=0; j<8; j++){
           String[] groupName = {"A", "B", "C", "D", "E", "F", "G", "H"};
       JSONArray jsonMainNode = jsonResponse.optJSONArray(groupName[j]);
       if (jsonMainNode.length() == 0){ continue;}
       else {
       for (int i = 0; i < jsonMainNode.length(); i++) {
        JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
        team1 = jsonChildNode.optString("team1");
        team2 = jsonChildNode.optString("team2");       
        group = jsonChildNode.optString("group");
        int live = jsonChildNode.getInt("live");
        String time = null;
        if (live == 1){
            time = jsonChildNode.optString("time0_90")+"'";
            score = jsonChildNode.optString("score");
            JSONArray jsonMoment = jsonChildNode.optJSONArray("moment");
            if (jsonMoment == null)
                {
                class_moment=new String[1];
                name1 = new String[1];
                name2 = new String[1];
                name1 = new String[1];
                time0_90Moment = new String[1];
                team = new int[1];
                }
               else {
                   class_moment=new String[jsonMoment.length()];
                    name1 = new String[jsonMoment.length()];
                    name2 = new String[jsonMoment.length()];
                    name1 = new String[jsonMoment.length()];
                    time0_90Moment = new String[jsonMoment.length()];
                    team = new int[jsonMoment.length()];
            for (int k = 0; k < jsonMoment.length(); k++) { 
                JSONObject jsonChildMoment = jsonMoment.getJSONObject(k);               
                class_moment[k] = jsonChildMoment.optString("class_moment");                
                name1[k] = jsonChildMoment.optString("name1");
                name2[k] = jsonChildMoment.optString("name2");
                time0_90Moment[k] = jsonChildMoment.optString("time0_90Moment");
                team[k] = jsonChildMoment.getInt("team");              
            }}          
            }
            else {
                score = jsonChildNode.optString("time");
                referee = jsonChildNode.optString("referee");
                time = jsonChildNode.optString("stadium");
                }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM