如何在json对象响应中解析json数组?

问题描述 投票:2回答:2

我想访问来自服务器的jsonObjet响应代码中的jsonArray数据。这是我的回应json

{
    event_id: "32",
    event_title: "امیر",
    event_description: "تست امیر",
    event_image: "2_1550507094.jpg",
    event_hikers_amount: "9",
    event_private: "0",
    event_date_start: "17/2/2019",
    event_date_end: "21/2/2019",
    event_time_start: "21:54",
    event_time_end: "12:54",
    event_locations_array: 
        "[
            {"latitude":37.58728984572849,"longitude":45.10016608983278},
            {"latitude":37.57651702299841,"longitude":45.0880378112197},
            {"latitude":37.5753956777439,"longitude":45.1045374199748},         
            {"latitude":37.564077382844964,"longitude":45.094508975744255},
            {"latitude":37.55829758877768,"longitude":45.08105669170619},
            {"latitude":37.53919984571198,"longitude":45.09874418377876}
        ]",
    event_latitude_location: "37.587289845728",
    event_longitude_location: "45.100166089833",
    event_status: "1",
    event_users_id: "2"
}

我想解析“event_locations_array”以及我做了什么:

@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");

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

                setTextView();

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

        }

在这里我不能把那个jsonArray。我在这里做错了让我知道。我提前感谢你有点困惑

android arrays response
2个回答
1
投票

Fast solution

如果您无法更改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();
  }
}

Detailed solution

有两个错误:

  1. event_locations_array"[[{"latitude":37.58728984572849].."包含一个字符串。对于它包含的值,我认为它必须生成为数组(没有初始和最终“)
  2. 修复第一个问题后,您尝试将属性latitudelongitude作为对象提取,但它们是属性。所以改变你的代码:
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");
}

0
投票

要获得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");
    }
© www.soinside.com 2019 - 2024. All rights reserved.