我需要解析關於議程中事件的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