Разбор JSON с 3 слоями (объект, массив, строка) в Android - PullRequest
0 голосов
/ 26 сентября 2018

Я не очень разбираюсь в разборе объектов 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"
      }
    ]
  }
}

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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

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

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();
    }

}
0 голосов
/ 26 сентября 2018

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

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);
  }
}
...