#java #android #json #parsing
#java #Android #json #синтаксический анализ
Вопрос:
У меня есть ответ JSON, который я должен показать в activity. Проблема, с которой я сталкиваюсь, связана с массивом JSON, который присутствует в ответе. Я хочу проанализировать его и показать данные об активности, в ответ на массив «start_times» я хочу показывать только по одному данным за раз…
Это ответ JSON, который я получаю от сервера
{
"data": {
"start_times": [
[
"08:00:00",
"09:00:00"
],
[
"09:00:00",
"10:00:00"
],
[
"10:00:00",
"11:00:00"
]
],
"mon": [
{
"subject__name": Electronics,
"faculty__first_name": Manoj
},
{
"subject__name": null,
"faculty__first_name": null
},
{
"subject__name": null,
"faculty__first_name": null
}
]
}
}
Мой код:
final StringRequest myStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
Log.i(TAG, "Response-->" response);
System.out.println(response);
try
{
JSONObject obj = new JSONObject(response);
JSONObject obj2 = obj.getJSONObject("data");
JSONArray timetable = obj2.getJSONArray("mon");
JSONArray timeTableTime = obj2.getJSONArray("start_times");
Log.d(TAG, "timeTableTime-->" timeTableTime);
Log.d(TAG, "TimetableLength-->" timetable.length());
for (int i = 0; i < timetable.length(); i )
{
JSONObject heroObject = timetable.getJSONObject(i);
mondayHero mon = new mondayHero(
heroObject.getString("faculty__first_name"),
heroObject.getString("subject__name"),
heroObject.getString("faculty__first_name"),
obj2.getJSONArray("start_times"));
Log.d(TAG, "mon-->" mon);
mondayList.add(mon);
}
//creating custom adapter object
mondayListViewAdaptor adapter = new mondayListViewAdaptor(mondayList, c.getApplicationContext());
//adding the adapter to listview
listView.setAdapter(adapter);
}
}
}
Фактический результат =
Subject : Electronics
Faculty : Manoj
Time : [["08:00:00","09:00:00"],
["09:00:00","10:00:00"],
["10:00:00","11:00:00"]]
Subject : null
Faculty : null
Time : [["08:00:00","09:00:00"],
["09:00:00","10:00:00"],
["10:00:00","11:00:00"]]
Subject : null
Faculty : null
Time : [["08:00:00","09:00:00"],
["09:00:00","10:00:00"],
["10:00:00","11:00:00"]]
Ожидаемый результат (я хочу) =
Subject : Electronics
Faculty : Manoj
Time : 08:00:00-09:00:00
Subject : null
Faculty : null
Time : 09:00:00-10:00:00
Subject : null
Faculty : null
Time : 10:00:00-11:00:00
Есть идеи, как решить эту проблему??
Ответ №1:
Вот исправленный код. Используйте timeTableTime
массив в вашем цикле for
for (int i = 0; i < timetable.length(); i ) {
JSONObject heroObject = timetable.getJSONObject(i);
JSONObject timeObject = timetableTime.getJSONObject(i);
mondayHero mon = new mondayHero(
heroObject.getString("faculty__first_name"),
heroObject.getString("subject__name"),
heroObject.getString("faculty__first_name"),
timeObject);
Log.d(TAG,"mon-->" mon);
mondayList.add(mon);
}
Комментарии:
1. Это работает для меня, спасибо, теперь я понял идею. Но мой вывод отображается как время : [«08:00:00″,»09:00:00»] после использования String time = hero.getTime().toString(); есть идеи @Дипак Хилларе
2. Да, вам нужно будет разделить массив строк и соединить их с помощью
-
разделителя. Итак, вместо того, чтобы делатьtimetableTime.getJSONObject(i)
, вы можете сделатьtimeTableTime.getJSONArray(i)
, который вернет вам массив. И тогда вы можете использоватьtimeObject[0] - timeObject[1]
для получения желаемого результата.3.
timeTableTime.getJSONArray(i).join("-");