1

帮我解析 JSON。我在没有“时刻”的情况下解析这个 JSON,也不知道如何用“时刻”解析。我的 JSON 响应:

{
"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": []
}

此代码是没有“时刻”的解析响应。如何用“时刻”解析响应并将其保存在数组中?

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");
            }
4

3 回答 3

1

我建议您使用 JSON 映射库,例如JacksonGS​​ON,手动解析 JSON 是浪费时间和精力,除非它纯粹用于教育目的。

除此之外,我认为正确的用法是 .optJSONArray("moment") 后跟一个迭代,将每个结果转换为 JSONObject 或类似的?手动这样做只是一团糟。;o

于 2014-01-06T00:49:07.487 回答
1

尝试这个 :

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");
于 2014-01-06T02:09:48.377 回答
0

我做到了,这是代码

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");
                }
于 2014-01-06T01:39:37.777 回答