Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过GSON从JSON列表中的多个对象获取多个属性_Java_Json_Gson - Fatal编程技术网

Java 通过GSON从JSON列表中的多个对象获取多个属性

Java 通过GSON从JSON列表中的多个对象获取多个属性,java,json,gson,Java,Json,Gson,我有一个json,它包含3个对象:问题、标记和选择 [ { "question" : { "questionId" : 01, "isActive" : 1 }, "tags" : ["tag1", "tag2"], "choices" : [{ "choiceId" : 0, "questionId" : 0

我有一个json,它包含3个对象:问题、标记和选择

[
    {
        "question" : {
            "questionId" : 01,
            "isActive" : 1
        },
        "tags" : ["tag1", "tag2"],
        "choices" : [{
                "choiceId" : 0,
                "questionId" : 0
            }, {
                "choiceId" : 1,
                "questionId" : 0
            }
        ]
    }
]
我目前正在使用GSON和这个提取器类,目的是从3个不同的对象获取详细信息:

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());
公共类提取器{
//问题、标记和选项是现有的类
问题;
列出标签;
列出选择;
//接球手和接球手
}
提取器结果=gson.fromJson(jsonString,Extractor.class);
//我想查看json中的问题、标记和选择部分
System.out.println(“Result”+Result.getTags().get(0.getName()+Result.getChoices().get(0.getChoiceId());

我做错了什么?如何分别获取问题、标记和选项的属性?另外,我如何能够遍历包含多个问题、标记和选项的JSONlist?

只要POJO类定义正确,下面的代码应该分别获取问题、标记和选项。有关POJO类的定义,请参考类似内容

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

        }

    }
POJO课程:-

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


}
公共类提取器实现可序列化{
私有静态最终长serialVersionUID=-225013835370141266L;
私人名单选择;
私有列表标签;
私人问题;
公共列表getChoices(){
返回选择;
}
公共选项(列表选项){
这个。选择=选择;
}
公共列表getTags(){
返回标签;
}
公共无效集合标记(列表标记){
this.tags=标签;
}
公共问题{
返回问题;
}
公众提问(问题){
这个问题=问题;
}
@凌驾
公共字符串toString(){
返回“JsonModel[choices=“+choices+”,tags=“+tags+”,question=“+question+”];
}
}
公共类选项实现可序列化{
私有静态最终长serialVersionUID=3947337014862847527L;
私有整数选择ID;
私有整数问号;
公共整数getChoiceId(){
返回choiceId;
}
public void setChoiceId(整数choiceId){
this.choiceId=choiceId;
}
公共整数getQuestionId(){
返回问题ID;
}
public void setQuestionId(整数questionId){
this.questionId=questionId;
}
@凌驾
公共字符串toString(){
返回“选项[choiceId=“+choiceId+”,questionId=“+questionId+”]”;
}
}
公共类问题实现了可序列化{
私有静态最终长serialVersionUID=-8649775972572186614L;
私有整数问号;
私有整数;
私有整数是活动的;
公共整数getQuestionId(){
返回问题ID;
}
public void setQuestionId(整数questionId){
this.questionId=questionId;
}
公共整数getCourseId(){
返回路线ID;
}
公共void setCourseId(整数courseId){
this.courseId=courseId;
}
公共整数getIsActive(){
回报是积极的;
}
public void setIsActive(整数isActive){
this.isActive=isActive;
}
@凌驾
公共字符串toString(){
返回“问题[questionId=“+questionId+”,courseId=“+courseId+”,isActive=“+isActive+”””;
}
}

这是一个有效的JSON,因为我验证了它,并且它向我抛出了一个错误?首先尝试验证JSON,您的问题是……@yashpandey如何修复它?我对json格式不太了解。@注意,Senpai您得到的错误到底是什么?它说:IllegalStateException:应该是BEGIN_对象,但在第1行第2列是BEGIN_数组。它说:IllegalStateException:应该是BEGIN_对象,但对我来说是字符串。您是否更改了程序中的任何内容或输入了json字符串?如果按原样运行,它应该可以正常工作。不过,我只是复制粘贴了它。我应该在我的POJO类中放置可序列化的实现吗?serialVersionUID有什么用?请参阅本文。顺便问一下,这个答案有用吗?