【问题标题】:Parsing generic tag in JSON from GSON从 GSON 解析 JSON 中的通用标签
【发布时间】:2013-05-29 15:18:37
【问题描述】:

我有一个包含通用值的 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 标记中,“events”之后是通用的,即“Sep 2013”​​。

我现在正在尝试的是:

public Event event ;

public class Event {

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

}

我正在访问它:

obj = gson.fromJson(reader, AllShowsActivityData.class);

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

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

gson.toJson(foo, fooType);

【问题讨论】:

  • 据我所知,对于通用字段,您已经搞砸了,无法再将 JSON 自动映射到某个对象。您必须自己使用 gson、sax-style 解析 JSON。
  • 说真的:(...一定有办法做到这一点。事实上根据sites.google.com/site/gson/…我们可以做到,但它是第一级标签。

标签: java android json parsing gson


【解决方案1】:

您确实可以使用Map,但您没有正确使用它。请注意,您拥有的是一个字段"events",它是一个包含多个对象对的对象stringarray

{ "events": { "Sep 2013": [ {}, {}, ... ], ... } }

要解析您的 JSON,您需要这样的类结构(在 伪代码 中):

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", ...

注意:事实上,如果你只想要这些日期,你甚至不需要 Event 类,你可以只使用 Map&lt;String, List&lt;Object&gt;&gt; events...

【讨论】:

  • @Hasandroid,只需将更多属性添加到类Event,其名称与JSON响应中的字段名称匹配,即String end_timeString event_desc等...(对于您只需使用Stringintboolean)。只需获取Event event = obj.getEvents().get(i); 的事件对象,即可访问event 中的所有字段...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2011-02-12
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多