Ошибка при разборе объекта JSON в Java Android - PullRequest
0 голосов
/ 09 мая 2019

В моем приложении для Android я извлекаю данные таблицы очков турнира, чтобы преобразовать выходные данные в строку из объекта JSON в Java

Объект JSON показан ниже:

{
  "group": {
    "Teams": [
      {
        "name": "Team 1",
        "p": "10",
        "w": "9",
        "l": "1",
        "points": "18"
      },
      {
        "name": "Team 2",
        "p": "10",
        "w": "9",
        "l": "1",
        "points": "18"
      },
      {
        "name": "Team 3",
        "p": "10",
        "w": "9",
        "l": "1",
        "points": "18"
      },
      {
        "name": "Team 4",
        "p": "10",
        "w": "6",
        "l": "4",
        "points": "12"
      },
      {
        "name": "Team 5",
        "p": "10",
        "w": "6",
        "l": "4",
        "points": "12"
      },
      {
        "name": "Team 6",
        "p": "10",
        "w": "6",
        "l": "4",
        "points": "12"
      },
      {
        "name": "Team 7",
        "p": "10",
        "w": "5",
        "l": "5",
        "points": "11"
      },
      {
        "name": "Team 8",
        "p": "10",
        "w": "5",
        "l": "5",
        "points": "11"
      }
    ]
  }
}

Код Android Java ниже:

JSONObject match = new JSONObject(response);

if (match.has("group")) {
    JSONObject group = match.getJSONObject("group");

    if (match.has("Teams")) {
        JSONObject teams = group.getJSONObject("Teams");

        if (teams.has("0")) {
            JSONObject teams_object = teams.getJSONObject("0");
            String team_name = teams_object.getString("name");
            String matches_played = teams_object.getString("p");
            String matches_won = teams_object.getString("w");
            String matches_lost = teams_object.getString("l");
            String points = teams_object.getString("points");
        }
    }
}

Но я получаю сообщение об ошибке, когда я печатаю сообщение об ошибке с помощью метода getMessage ().Вот ошибка ниже:

Error: Value ["name","p","w","l","points"] at header of type org.json.JSONArray cannot be converted to JSONObject

Может кто-нибудь, пожалуйста, помогите, например, где я иду не так, или что за исправление?Заранее спасибо

Ответы [ 6 ]

1 голос
/ 09 мая 2019

В ваших командах Json содержится массив объектов, и вы неправильно анализируете.Попробуйте это

 JSONObject jsonObject = new JSONObject(response);
 JSONObject groups = jsonObject.getJSONObject("group");
 JSONArray teams = groups.getJSONArray("Teams");
 for(int i=0;i<teams.length();i++){
        JSONObject obj = teams.getJSONObject(i);
        name.append(obj.getString("name")+"\n");
 }
0 голосов
/ 09 мая 2019

В вашем коде 4 ошибки,

1.Вы должны проверить, имеет ли group 1004 * вместо match teams.

2.Вы должны получить team как JSONArray вместо JSONObject, потому что это массив.

3.Вы должны проверить размер команды, вместо того, чтобы найти объект с ключом 0, в вашей группе нет объекта с именем 0,

4.Вы должны получить объект на основе индекса вместо ключа (т. Е. 0)

Пожалуйста, проверьте рабочий код, это проверено

try {
    JSONObject  match = new JSONObject(response);
    if (match.has("group")) {
        JSONObject group = match.getJSONObject("group");

        if (group.has("Teams")) {
            JSONArray teams = group.getJSONArray("Teams");

            if (teams.length() > 0) {
                JSONObject teams_object =(JSONObject) teams.get(0);
                String team_name = teams_object.getString("name");
                String matches_played = teams_object.getString("p");
                String matches_won = teams_object.getString("w");
                String matches_lost = teams_object.getString("l");
                String points = teams_object.getString("points");
                Log.v(TAG, team_name);
            }
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}
0 голосов
/ 09 мая 2019

Ошибка: значение ["name", "p", "w", "l", "points"] в заголовке типа org.json.JSONArray невозможно преобразовать в JSONObject

Вы получаете сообщение об ошибке, поскольку существует массив команд, и вы пытаетесь выполнить синтаксический анализ с JSONObject

Пожалуйста, проверьте приведенный ниже фрагмент кода.Это будет работать.

try {
        JSONObject match = new JSONObject("your_response");
        if (match.has("group")) {
            JSONObject group = match.getJSONObject("group");

            if (group.has("Teams")) {
                JSONArray teams = group.getJSONArray("Teams");

                for(int i=0; i < teams.length(); i++){
                    JSONObject teams_object = (JSONObject) teams.get(i);
                    String team_name = teams_object.getString("name");
                    String matches_played = teams_object.getString("p");
                    String matches_won = teams_object.getString("w");
                    String matches_lost = teams_object.getString("l");
                    String points = teams_object.getString("points");
                }
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
0 голосов
/ 09 мая 2019
if (match.has("group")) {
    JSONObject group = match.getJSONObject("group");

    if (match.has("Teams")) {
        JSONArray teams = group.getJSONArray("Teams");

     // for only 0th element use below code else looping

                JSONObject teams_object = (JSONObject) teams.get(0);
                String team_name = teams_object.getString("name");
                String matches_played = teams_object.getString("p");
                String matches_won = teams_object.getString("w");
                String matches_lost = teams_object.getString("l");
                String points = teams_object.getString("points");

    }
}
0 голосов
/ 09 мая 2019
try {
    JSONObject jsonObject = new JSONObject(response.body().string());
    JSONObject subObject = jsonObject.getJSONObject("group") ;
    JSONArray jsonArray = subObject.getJSONArray("Teams");
    for (int i=0; i<jsonArray.length(); i++){
        JSONObject object = jsonArray.getJSONObject(i);
        String name = jsonObject.getString("name");
        String p= jsonObject.getString("p");
        String w= jsonObject.getString("w");
        String l= jsonObject.getString("l");
        String points = jsonObject.getString("points");
    }
} catch (Exception e) {
     e.printStackTrace();
}
0 голосов
/ 09 мая 2019

Попробуйте @SaAsh, я только что отредактировал, приняв ваш ответ

if (match.has("group")) {
JSONObject group = match.getJSONObject("group");

if (match.has("Teams")) {
    JSONObject teams = group.getJsonArray("Teams");


        for(int i = 0 ; i < teams.length();i++){
        JSONObject teams_object = teams.getJSONObject("i");
        String team_name = teams_object.getString("name");
        String matches_played = teams_object.getString("p");
        String matches_won = teams_object.getString("w");
        String matches_lost = teams_object.getString("l");
        String points = teams_object.getString("points");
      }
    }
}
}
...