gpt4 book ai didi

Android:使用 GSON 解析带有动态字段的响应

转载 作者:行者123 更新时间:2023-11-29 00:43:28 25 4
gpt4 key购买 nike

我需要解析关于议程中事件的 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,我的初始化会是什么样子?

问候


我已经通过将 Jackson 与默认 Map 一起使用来尝试 Amir 的建议。遗憾的是,这会创建一个大小为 1Map。整个 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.");
}

如您所见,这仍然包含测试名称,但至少它可以工作。感谢大家的帮助!

最佳答案

由于月份数据不是有效的 java 标识符,您可能必须使用 custom serialization 与 GSON。您正在谈论使用 Map 对象,但如果您打算这样做,您也可以使用 org.json 像 JSONObject 这样的对象,它们基本上是建立在 map /哈希表上的。

关于Android:使用 GSON 解析带有动态字段的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com