-1

I have a json that contains 3 objects: question, tags, and choices.

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

I currently am using GSON and this Extractor class with the intention of getting the details from the 3 different objects:

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());

What am I doing wrong? How do I get the properties of question, tags, and choices separately? Also, how would I be able to iterate over a JSONlist that contains multiple questions, tags, and choices?

1 Answers1

0

The below code should get the question, tags and choices separately as long as the POJO classes are defined correctly. Please refer this similar post for POJO class definitions.

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());

        }

    }

Output:-

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 Classes:-

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 + "]";
    }


}
Community
  • 1
  • 1
notionquest
  • 37,595
  • 6
  • 111
  • 105