Как проанализировать массив JSON в ответе объекта JSON? - PullRequest
0 голосов
/ 02 марта 2019

Я хочу получить доступ к данным jsonArray в коде ответа jsonObjet, который приходит с сервера.вот мой ответчто я сделал не так, дайте мне знать.Я немного растерялся, спасибо заранее

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Чтобы получить значения event_locations_array, используйте следующий код:

JSONArray jsonArray = jsonResponse.getJSONArray("event_locations_array");
    for (int i=0; i<jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        String latitude = jsonObject.getString("latitude");
        String longitude = jsonObject.getString("longitude");
    }
0 голосов
/ 02 марта 2019

Быстрое решение

Если вы не можете изменить поколение JSON, просто используйте этот код:

@Override
protected void onPostExecute(String result) {

try {
  JSONObject jsonObject = new JSONObject(result);

  description = jsonObject.getString("event_description");
  people_joined = jsonObject.getString("event_hikers_amount");
  date_start = jsonObject.getString("event_date_start");
  date_end = jsonObject.getString("event_date_end");
  time_start = jsonObject.getString("event_time_start");
  time_end = jsonObject.getString("event_time_end");
  privacy = jsonObject.getString("event_private");

  // 1 - fix string to array conversion
  JSONArray jsonArray = new JSONArray(jsonObject.getString("event_locations_array"));
  for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject points = jsonArray.getJSONObject(i);
    // 2 - the fields as double
    double lat = points.getDouble("latitude");
    double lang = points.getDouble("longitude");
  }

  setTextView();

  } catch (JSONException e) {
    e.printStackTrace();
  }
}

Подробное решение

Есть две ошибки:

  1. event_locations_array: "[[{"latitude":37.58728984572849].." содержит строку.Я думаю, что для содержащегося в нем значения он должен быть сгенерирован как массив (без начального и конечного ")

  2. После устранения первой проблемы вы пытаетесь извлечь в качестве объекта свойства latitude и longitude, но они являются атрибутами. Поэтому измените код:

for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject points = jsonArray.getJSONObject(i);
  JSONObject lat = points.getJSONObject("latitude");
  JSONObject lang = points.getJSONObject("longitude");
}

С

for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject points = jsonArray.getJSONObject(i);
  double lat = points.getDouble("latitude");
  double lang = points.getDouble("longitude");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...