Я пытаюсь создать список "событий" для повестки дня.
Для этого я получаю ответ JSON, который содержит несколько объектов месяца, которые в свою очередь содержат массив объектов события.
Когда я получаю свой ответ, все месяцы упорядочиваются, как показано ниже:
{
"Agenda/Future": {
"November 2011/0": [
{
"id": "5710",
"eventid": "",
"name": "test7",
"startdate": "nov 9",
"datecompute": "2011-11-09T12:00:00",
"group_month": "November 2011",
"flg_Data": "Database"
},
{
"id": "5707",
"eventid": "",
"name": "test4",
"startdate": "nov 17",
"datecompute": "2011-11-17T12:00:00",
"group_month": "November 2011",
"flg_Data": "Database"
},
{
"id": "5704",
"eventid": "",
"name": "test",
"startdate": "nov 30",
"datecompute": "2011-11-30T12:00:00",
"group_month": "November 2011",
"flg_Data": "Database"
}
],
"December 2011/1": [
{
"id": "5705",
"eventid": "",
"name": "test2",
"startdate": "dec 28",
"datecompute": "2011-12-28T12:00:00",
"group_month": "December 2011",
"flg_Data": "Database"
}
],
"November 2013/2": [
{
"id": "5706",
"eventid": "",
"name": "test3",
"startdate": "nov 1",
"datecompute": "2013-11-01T12:00:00",
"group_month": "November 2013",
"flg_Data": "Database"
},
{
"id": "5708",
"eventid": "",
"name": "test5",
"startdate": "nov 15",
"datecompute": "2013-11-15T12:00:00",
"group_month": "November 2013",
"flg_Data": "Database"
},
{
"id": "5709",
"eventid": "",
"name": "test6",
"startdate": "nov 15",
"datecompute": "2013-11-15T12:00:00",
"group_month": "November 2013",
"flg_Data": "Database"
}
]
}
}
Сначала ноябрь 2011 г., затем декабрь 2011 г. и, наконец, ноябрь 2013 г.
Однако после анализа этого ответа порядок был изменен на ноябрь 2011 г., ноябрь 2013 г., декабрь 2011 г.
Вот так:
Очевидно, это может вызвать некоторую путаницу.
Моя теория состоит в том, что из-за использования JSONArray eventNames = agenda.names();
, который получает имена объектов месяца, порядок меняется на один, основанный на фактическом месяце, а не на году. Это было подтверждено после добавления другого события в марте 2022 года, и это событие заканчивается первым.
Я проверил свой код, и нигде не могу найти какую-либо функцию, которая изменила бы порядок, что делает names();
наиболее вероятным виновником.
У меня вопрос, как я могу убедиться, что объекты в моем начальном JSONArray
упорядочены по месяцу + году, а не только по месяцу. Удаление метода names()
не вариант, учитывая тот факт, что имена объектов для месяцев являются динамическими (в зависимости от месяца + года). Я также предпочел бы не переходить на другую систему синтаксического анализа (GSON, Джексон), поскольку это единственная система, которая успешно проанализировала мой ответ (см. Предыдущие задаваемые вопросы).
В конце концов удалось исправить это, перебрав массив с полными именами, а затем проверив, содержит ли это имя какие-либо части из упорядоченного списка (тот, который содержит лет + идентификатор). Если строка содержит эту часть, добавьте ее в новый массив в позиции года + идентификатор, который она содержала. Код можно найти ниже
String[] test = new String[eventNames.length()];
String[] test2;
for (int x = 0; x < eventNames.length(); x++){
//System.out.println(eventNames.get(x).toString());
String[] xx = eventNames.get(x).toString().split(" ");
test[x] = xx[1];
}
Arrays.sort(test);
String[] test3 = new String[eventNames.length()];
for(int q = 0; q < eventNames.length(); q++){
String str = eventNames.get(q).toString();
for(int p = 0; p < test.length; p++){
if(str.contains(test[p])){
test3[p] = str;
}
}
}
System.out.println(test.toString());
for (int x = 0; x < eventNames.length(); x++){
System.out.println("maand :"+x+" "+test3[x]);
}