Java 从GSON解析JSON中的泛型标记

Java 从GSON解析JSON中的泛型标记,java,android,json,parsing,gson,Java,Android,Json,Parsing,Gson,我有一个包含泛型值的JSON。我用地图试过了,但没有结果。我的问题是通用标记从第二级开始。下面是我试图通过gson解析的JSON { "success": true, "status": 200, "events": { "Sep 2013": [ { "artist_id": 1, "created_at": "2013-05-18T15:21:00Z", "duration": 2,

我有一个包含泛型值的JSON。我用地图试过了,但没有结果。我的问题是通用标记从第二级开始。下面是我试图通过gson解析的JSON

{
"success": true,
"status": 200,
"events": {
    "Sep 2013": [
        {
            "artist_id": 1,
            "created_at": "2013-05-18T15:21:00Z",
            "duration": 2,
            "end_time": "2013-09-19T22:00:00Z",
            "event_desc": "",
            "event_facebook_link": "",
            "event_link": "https://www.smtickets.com/marketing/view/1316",
            "feature_small": false,
            "featured_status": false,
            "id": 90,
在这个JSON标记中,“事件”之后是通用的,即“2013年9月”

我现在正在尝试的是:

public Event event ;

public class Event {

    public ArrayList<Map<String, String>> dates;    

}
谁能告诉我,我怎样才能把日期分类。所以Gson可以序列化它。或者有没有其他方法来迭代第一级标记,然后我可以这样声明它

Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
Type fooType=new-TypeToken(){}.getType();

toJson(foo,fooType)

您确实可以使用
地图
,但您没有正确使用它。请注意,您拥有的是一个字段
“events”
,它是一个包含多对
字符串
数组
对象的对象:

{ "events": { "Sep 2013": [ {}, {}, ... ], ... } }
要解析JSON,您需要这样的类结构(在伪代码中):


最后,如果您想要访问日期,那么您可以将所有日期都输入:

Set<String> dates = obj.getEvents().keySet(); //"Sep 2013", ...
Set dates=obj.getEvents().keySet()//“2013年9月”。。。

注意:事实上,如果你只想要那些日期,你甚至不需要类
事件
,而且你可以使用
映射事件

,据我所知,使用通用的fiels,你就完蛋了,不能再自动将JSON映射到某个对象。您必须自己使用gson、sax-style解析JSON。认真地说:(…一定有办法做到这一点。事实上,根据我们可以做到,但这是针对第一级标记的。@Hasandroid,只需向类
事件
添加更多属性,名称与JSON响应中的字段名称匹配,即
字符串结束时间
字符串事件描述
,等等。。。(只使用
String
int
boolean
)更容易。使用
event-event=obj.getEvents().get(i);
,只需获取事件对象,就可以访问
event
中的所有字段。。。
class AllShowsActivityData
  Map<String, List<Event>> events

class Event
  int artist_id
  String created_at //parsing as String to simplify...
  int duration
  ...
AllShowsActivityData obj = gson.fromJson(reader, AllShowsActivityData.class);
Set<String> dates = obj.getEvents().keySet(); //"Sep 2013", ...