【发布时间】:2011-11-01 14:29:52
【问题描述】:
我需要解析有关议程中事件的 JSON 响应,其中一个字段是动态的。此字段会根据事件发生的月份而变化。
现在我之前一直在使用 GSON 解析数据,但是这些都有静态字段,因此创建必要的 POJO 非常容易。但是我该如何处理动态字段呢?
我需要解析的响应是这样的:
{
"Agenda/Future": {
"November 2011/0": [
{
"id": "5675",
"eventid": "",
"name": "testing testing 123",
"startdate": "nov 25",
"datecompute": "2011-11-25T08:00:00",
"group_month": "November 2011",
"flg_Data": "Database"
}
],
"February 2012/1": [
{
"id": "5681",
"eventid": "",
"name": "dfd",
"startdate": "feb 3",
"datecompute": "2012-02-03T12:00:00",
"group_month": "February 2012",
"flg_Data": "Database"
},
{
"id": "5679",
"eventid": "",
"name": "vfvd",
"startdate": "feb 17",
"datecompute": "2012-02-17T12:00:00",
"group_month": "February 2012",
"flg_Data": "Database"
}
],
"February 2013/2": [
{
"id": "5680",
"eventid": "",
"name": "df",
"startdate": "feb 14",
"datecompute": "2013-02-14T12:00:00",
"group_month": "February 2013",
"flg_Data": "Database"
}
],
"September 2013/3": [
{
"id": "5677",
"eventid": "",
"name": "fsdfsd",
"startdate": "sep 14",
"datecompute": "2013-09-14T12:00:00",
"group_month": "September 2013",
"flg_Data": "Database"
}
],
"November 2015/4": [
{
"id": "5676",
"eventid": "",
"name": "fsdfsd",
"startdate": "nov 13",
"datecompute": "2015-11-13T12:00:00",
"group_month": "November 2015",
"flg_Data": "Database"
}
]
}
}
如您所见,关于月份的对象标题是动态的。标题末尾的值以及标题本身都会根据实际月份和月份数组中的位置而变化。
根据我在 SO 的其他问题上看到的情况,我需要与 Maps 合作。
但我不太确定我将如何去做。
假设我为月份数组中包含的各个事件创建了一个名为 Event 的 POJO,我的初始化会是什么样子?
问候
我尝试了 Amir 的建议,将 Jackson 与默认的 Map 结合使用。
遗憾的是,这会创建一个大小为1 的Map。整个 JSON 响应被解析为单个对象。当然,这不是我想要的,因为我需要从各个事件中获取数据。
有没有人建议我如何做到这一点?通常我会很快弄清楚这些事情,但由于动态对象命名,我无法理解这一点。
我最终设法解决了这个问题。我最终使用了普通的 JSONObjects,它最终起作用了。
我用来让它工作的代码如下:
JSONObject jsonObject = new JSONObject(response);
JSONObject agenda = jsonObject.getJSONObject("Agenda/Future");
if (agenda != null) {
System.out.println(agenda.length());
JSONArray events = agenda.names();
if (events.length() > 0) {
System.out.println("At least its bigger then 0. It's: "
+ events.length());
for (int i = 0; i < events.length(); i++) {
System.out.println(events.get(i).toString());
JSONArray test = agenda.getJSONArray(events.get(i)
.toString());
if (test != null) {
JSONObject testt = test.getJSONObject(0);
if (testt != null) {
System.out.println(testt.getString("name"));
} else {
System.out.println("Still empty, Check again.");
}
}
}
}
} else {
System.out.println("Agenda is completely empty, try again.");
}
如您所见,这仍然包含测试名称,但至少它有效。 感谢大家的帮助!
【问题讨论】:
标签: android parsing dynamic gson