2016-10-20 19 views
-1

質問、タグ、および選択肢の3つのオブジェクトを含むjsonがあります。JSONリストの複数のオブジェクトから複数のプロパティを取得するGSON

[ 
    { 
     "question" : { 
      "questionId" : 01, 
      "isActive" : 1 
     }, 
     "tags" : ["tag1", "tag2"], 
     "choices" : [{ 
       "choiceId" : 0, 
       "questionId" : 0 
      }, { 
       "choiceId" : 1, 
       "questionId" : 0 
      } 
     ] 
    } 
] 

私は現在、3つの異なるオブジェクトから詳細情報を取得することを意図してGSONと、このExtractorのクラスを使用しています:私は間違って

public class Extractor { 

//question, tags, and choices are existing classes 
Questions question; 
List<Tags> tags; 
List<Choice> choices; 

//getters and setters 
} 

Extractor result = gson.fromJson(jsonString, Extractor.class); 

//I want to see the question, tag, and choice parts from the json 
System.out.println("Result" + result.getTags().get(0).getName() + result.getChoices().get(0).getChoiceId()); 

何をしているのですか?質問、タグ、および選択肢のプロパティを個別に取得するにはどうすればよいですか?また、複数の質問、タグ、および選択肢を含むJSONlistを繰り返し処理するにはどうすればよいですか?

+0

私が検証され、それは私にエラーを投げているので、これは、有効なJSONです。 ? JSONを最初に検証してみてください – yashpandey

+0

とあなたの問題は..... –

+0

@yashpandeyどうすれば修正できますか?私はjsonの書式についてはあまり知らない。 – noticemesenpai

答えて

0

以下のコードは、POJOクラスが正しく定義されている限り、質問、タグ、および選択肢を別々に取得する必要があります。 POJOクラスの定義については、この類似postを参照してください。

public static void main(String[] args) { 

     String jsonString = "[{\"question\":{\"questionId\":01,\"isActive\":1},\"tags\":[\"tag1\",\"tag2\"],\"choices\":[{\"choiceId\":0,\"questionId\":0},{\"choiceId\":1,\"questionId\":0}]}]"; 
     Gson gson = new Gson(); 

     JsonParser parser = new JsonParser(); 
     JsonArray array = parser.parse(jsonString).getAsJsonArray(); 

     for (final JsonElement json : array) { 
      Extracter jsonModel = gson.fromJson(json, new TypeToken<Extracter>() { 
      }.getType()); 

      System.out.println(jsonModel.toString()); 

      List<Choices> choicesList = jsonModel.getChoices(); 
      //Looping the choices 
      for (Choices choice :choicesList) { 
       System.out.println("Choice :" + choice); 
       System.out.println("Choice Id :" + choice.getChoiceId()); 
       System.out.println("Question Id :" + choice.getQuestionId()); 
      } 

      //Printing the question 
      System.out.println("Question obj data :" + jsonModel.getQuestion()); 
      System.out.println("Course Id :" + jsonModel.getQuestion().getQuestionId()); 
      System.out.println("Active :" + jsonModel.getQuestion().getIsActive()); 

      //Printing the tags 
      System.out.println(jsonModel.getTags()); 

     } 

    } 

出力: -

Choice :Choices [choiceId=0, questionId=0] 
Choice Id :0 
Question Id :0 
Choice :Choices [choiceId=1, questionId=0] 
Choice Id :1 
Question Id :0 
Question obj data :Question [questionId=1, courseId=null, isActive=1] 
Course Id :1 
Active :1 
[tag1, tag2] 

POJOクラス: -

public class Extracter implements Serializable { 

    private static final long serialVersionUID = -2255013835370141266L; 
    private List<Choices> choices; 
    private List<String> tags; 
    private Question question; 

    public List<Choices> getChoices() { 
     return choices; 
    } 
    public void setChoices(List<Choices> choices) { 
     this.choices = choices; 
    } 
    public List<String> getTags() { 
     return tags; 
    } 
    public void setTags(List<String> tags) { 
     this.tags = tags; 
    } 
    public Question getQuestion() { 
     return question; 
    } 
    public void setQuestion(Question question) { 
     this.question = question; 
    } 
    @Override 
    public String toString() { 
     return "JsonModel [choices=" + choices + ", tags=" + tags + ", question=" + question + "]"; 
    } 

} 


public class Choices implements Serializable{ 

    private static final long serialVersionUID = 3947337014862847527L; 

    private Integer choiceId; 
    private Integer questionId; 

    public Integer getChoiceId() { 
     return choiceId; 
    } 
    public void setChoiceId(Integer choiceId) { 
     this.choiceId = choiceId; 
    } 
    public Integer getQuestionId() { 
     return questionId; 
    } 
    public void setQuestionId(Integer questionId) { 
     this.questionId = questionId; 
    } 
    @Override 
    public String toString() { 
     return "Choices [choiceId=" + choiceId + ", questionId=" + questionId + "]"; 
    } 



} 


public class Question implements Serializable{ 

    private static final long serialVersionUID = -8649775972572186614L; 

    private Integer questionId; 
    private Integer courseId; 
    private Integer isActive; 

    public Integer getQuestionId() { 
     return questionId; 
    } 
    public void setQuestionId(Integer questionId) { 
     this.questionId = questionId; 
    } 
    public Integer getCourseId() { 
     return courseId; 
    } 
    public void setCourseId(Integer courseId) { 
     this.courseId = courseId; 
    } 
    public Integer getIsActive() { 
     return isActive; 
    } 
    public void setIsActive(Integer isActive) { 
     this.isActive = isActive; 
    } 
    @Override 
    public String toString() { 
     return "Question [questionId=" + questionId + ", courseId=" + courseId + ", isActive=" + isActive + "]"; 
    } 


} 
+0

それは言う:IllegalStateException:期待BEGIN_OBJECTが私のためのSTRINGだった。 – noticemesenpai

+0

プログラム内の何かを変更したか、またはjson文字列を入力しましたか?あなたがそのまま走れば、うまくいくはずです。 – notionquest

+0

文字通り貼り付けてコピーします。 POJOクラスにSerializableを実装する必要がありますか? – noticemesenpai

関連する問題