在Android中解析具有3层(对象,数组,字符串)的JSON

时间:2018-09-26 15:43:07

标签: android json parsing gson

我对解析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“数据”而不是“翻译”,但我不知道如何将代码修改为应有的形式?

2 个答案:

答案 0 :(得分:0)

尝试一下:

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

答案 1 :(得分:0)

自从我使用内置的int Android JSON对象以来已经有一段时间了,但是我的最初反应是,您需要在解析JSON数组“ translations”之前先解析JSON对象“ data”。修改您以前的代码:

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

}