我需要解析关于议程中事件的JSON响应,其中的字段是动态的。该字段根据事件发生的月份而变化。Android:使用GSON解析带有动态字段的响应
现在我以前一直在用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,我的初始化将是什么样子?
问候
我以杰克逊默认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.");
}
正如你所看到的,这还包含测试的名称,但至少它的工作原理。 感谢大家的帮助!
+1不错的问题。 – Venky