필드가 동적 인 일정 목록에서 이벤트에 대한 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"
}
]
}
}
당신이 볼 수 있듯이, 달에 대한 개체의 제목은 동적입니다. 제목의 끝 부분에있는 값과 제목 자체는 달 배열에서 실제 달과 위치를 기반으로 변경됩니다.
내가 여기에서 다른 질문을 본 것에서부터 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