我有一个包含通用值的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;
}
我正在访问它:
obj = gson.fromJson(reader, AllShowsActivityData.class);
谁能告诉我如何安排一班约会.因此,Gson可以序列化它.还是有其他方法可以迭代一级标签,然后我可以像这样声明它
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
gson.toJson(foo,fooType);
解决方法:
您确实可以使用地图,但是使用不正确.请注意,您拥有的是“事件”字段,该字段是一个包含许多对字符串和对象数组的对象:
{ "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< String,List< Object>>.事件…