2012-08-24 2 views
1

나는 this json을 파싱하고 POJO를 생성하려고합니다. 온라인 문서는 나 혼란 스럽다. 같은 유형의 객체가 많이 발생한다는 사실을 잘못 처리하고있는 것 같습니다. 배열이 필요합니까? 그게 어떻게 생겼어?자바에서 gson으로 json을 파싱하기

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
: 여기에 클래스의 최신 버전은 여기에 지금까지 내 클래스입니다

주 부모 개체가 있어야합니다. 이 같은 K 뭔가 :

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 at ..."오류가 발생합니다. – cafman

+0

왜냐하면 그 속성 값이 객체이어야 할 때 'String'이라는 것을 잘못 지정했기 때문입니다. Gson은 문자열 (예 :'''로 시작하는 문자열)을 보지 않고 객체의 시작을 봅니다 (즉'{')가 표시됩니다.) –

+0

알겠습니다. – cafman

관련 문제