【发布时间】:2011-11-08 12:50:13
【问题描述】:
我正在尝试为议程创建一个“事件”列表。 为此,我收到一个 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 年 11 月,然后是 2011 年 12 月,最后是 2013 年 11 月。
但是在解析此响应后,顺序已更改为 2011 年 11 月、2013 年 11 月、2011 年 12 月。 像这样:
显然,这可能会引起一些混乱。
我的理论是,由于使用了获取月份对象名称的JSONArray eventNames = agenda.names();,因此顺序会根据实际月份而不是年份更改为一个。这在 2022 年 3 月添加另一个事件后得到了确认,并且此事件首先结束。
我检查了我的代码,在任何地方都找不到任何会改变排序的函数,这使得names(); 最有可能是罪魁祸首。
我的问题是,如何确保我最初的 JSONArray 中的对象按月 + 年排序,而不是按月排序。考虑到月份的对象名称是动态的(基于月份+年份)这一事实,删除names() 方法不是一种选择。我也不想更改为不同的解析系统(GSON、Jackson),因为这是唯一成功解析我的回复的系统(请参阅之前提出的问题)。
最终设法通过遍历包含全名的数组来修复它,然后检查该名称是否包含有序列表中的任何部分(包含年份 + id 的部分)。如果字符串包含该部分,则将其添加到其包含的 year+id 位置的新数组中。代码可以在下面找到
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]);
}
【问题讨论】:
标签: android json parsing arrays