2012-08-24 51 views
1

我试图解析this json并从中创建一个POJO。在线文档让我感到困惑。我怀疑我错误地处理了同一类型的对象有许多不同的事件。我需要一个数组吗?那将是什么样子?这里是我的班至今:用java解析json与gson

public class StoryGSONClass { 
private Response kind; 

public static class Response { 
    private String Listing; 
    private Data data; 
} 

public static class Data { 
    private String modhash; 
    private Children children; 
    private String after; 
    private String before; 
} 

public static class Children { 
    private String childKind; 
    private ChildData childData; 
} 

public static class ChildData { 
    private String domain; 
    private String banned_by; 
    private String media_embed; 
    private String subreddit; 
    private String selftext_html; 
    private String selftext; 
    private String likes; 
    private String link_flair_text; 
    private String id; 
    private String clicked; 
    private String title; 
    private String num_comments; 
    private String score; 
    private String approved_by; 
    private String over_18; 
    private String hidden; 
    private String thumbnail; 
    private String subreddit_id; 
    private String edited; 
    private String link_flair_css_class; 
    private String author_flair_css_class; 
    private String downs; 
    private String saved; 
    private String is_self; 
    private String permalink; 
    private String name; 
    private String created; 
    private String url; 
    private String author_flair_text; 
    private String author; 
    private String created_utc; 
    private String media; 
    private String num_reports; 
    private String ups; 
} 

}

其次

Gson gson = new Gson();  
StoryGSONClass target2 = gson.fromJson(objectName, StoryGSONClass.class); 

编辑:这里是类的最新版本:

public class Response { 
    private String kind; 
    private ResponseData data; 

public static class ResponseData { 
    private String modhash; 
    private List<ResponseChildData> children; 
    private String after; 
    private String before; 
} 

public static class ResponseChildData { 
    private String kind; 
    private ChildData data; 
} 

public static class ChildData { 
    private String domain; 
    private String banned_by; 
    private Object media_embed; 
    private String subreddit; 
    private String selftext_html; 
    private String selftext; 
    private String likes; 
    private String link_flair_text; 
    private String id; 
    private boolean clicked; 
    private String title; 
    private int num_comments; 
    private int score; 
    private String approved_by; 
    private boolean over_18; 
    private boolean hidden; 
    private String thumbnail; 
    private String subreddit_id; 
    private boolean edited; 
    private boolean link_flair_css_class; 
    private boolean author_flair_css_class; 
    private int downs; 
    private boolean saved; 
    private boolean is_self; 
    private String permalink; 
    private String name; 
    private String created; 
    private String url; 
    private String author_flair_text; 
    private String author; 
    private String created_utc; 
    private String media; 
    private String num_reports; 
    private int ups; 
} 

}

回答

0

主要的父对象应该是厕所ķ是这样的:

public class Response { 
    private String kind; 
    private ResponseData data; 

    ... 
} 

然后ResponseData是:

public class ResponseData { 
    private String modhash; 
    private List<ResponseChildData> children; // I imagine this is where you're having 
               // some confusion. You can use a list here 
               // and you should be fine. 

    ... 
} 

而且ResponseChildData是:

public class ResponseChildData { 
    private String kind; 
    private ChildData data; // This could be a Map<String, String>, but then you'd 
          // possibly lose type information. I haven't used GSON 
          // enough to know if it would balk when it sees that some 
          // values are int and boolean and refuse to deserialize. 
          // Using a specific type here is probably better anyway 

    ... 
} 

最后,ChildData是:

public class ChildData { 
    private String domain; 
    private String banned_by; 
    ... 
    ... 
    private int ups; 

    ... 
} 

然后你可以d o:

Gson gson = new Gson();  
Response target2 = gson.fromJson(objectName, Response.class); 
+0

我已经更新了课程。当孩子返回空时,一切都很好,我可以访问像data.modhash的东西。但是当孩子回来非空时,我得到一个“java.lang.IllegalStateException:期望一个字符串,但是BEGIN_OBJECT在......”错误。 – cafman

+0

这是因为您错误地指定了该属性的值应该是对象时的“String”。 Gson没有看到一个字符串(即以'“开头的东西),而是看到了一个对象的开始(即它看到一个'{')。 –

+0

明白了。谢谢。 – cafman