我有一个包含通用值的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);
答案 0 :(得分:3)
您确实可以使用Map
,但您没有正确使用它。请注意,您拥有的是字段"events"
,该字段包含许多对string
和array
个对象:
{ "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>> events
...