Разбор JSON с 3 слоями (объект, массив, строка) в Android

Я не очень знаком с анализом объектов JSON, и мне очень нужна помощь ваших ребят в этом. Я знаю, что синтаксический анализ, который я выполняю, неправильный, и я не понял, прочитав источники в Интернете о синтаксическом анализе в Android Studio.

Приведенный ниже код является частью моего проекта.

public void onResponse(JSONObject response) {
        try {
            JSONArray jsonArray = response.getJSONArray("translations");

            for (int i = 0;  i < jsonArray.length(); i++ ) {
                JSONObject translations = jsonArray.getJSONObject(i);

                String translatedText = translations.getString("translatedText");

                textView.append(translatedText);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

Объект JSON, который я пытаюсь проанализировать, находится ниже: -

{
  "data": {
    "translations": [
      {
        "translatedText": "queso"
      }
    ]
  }
}

Мне сказали, что мой код не работает, поскольку первый уровень JSON - это «данные» JSONObject, а не «переводы», но я не знаю, как изменить код так, как он должен быть?

0
0
525
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это:

JSONObject jsonData = response.getJSONObject("data");
if (jsonData != null) {
  JSONArray jsonArray = jsonData.getJSONArray("translations");

  for (int i = 0;  i < jsonArray.length(); i++ ) {
    JSONObject translations = jsonArray.getJSONObject(i);

    String translatedText = translations.getString("translatedText");

    textView.append(translatedText);
  }
}
Ответ принят как подходящий

Прошло некоторое время с тех пор, как я использовал встроенные объекты JSON в Android, но моя первая реакция такова, что вам нужно проанализировать "данные" объекта JSON перед синтаксическим анализом "переводов" массива JSON. Изменение вашего предыдущего кода:

public void onResponse(JSONObject response) {
    try {
        JSONObject data = response.getJSONObject("data"); // get data first
        JSONArray jsonArray = data.getJSONArray("translations"); // get the array from data

        for (int i = 0;  i < jsonArray.length(); i++ ) {
            JSONObject translations = jsonArray.getJSONObject(i);

            String translatedText = translations.getString("translatedText");

            textView.append(translatedText);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

Другие вопросы по теме