【问题标题】:Parsing a JSON file in Java using GSON使用 GSON 解析 Java 中的 JSON 文件
【发布时间】:2020-01-28 06:56:20
【问题描述】:

我正在尝试在 java 中使用 GSON 解析这个 JSON 文件,但我遇到了一些困难。

{"group": [
{
   "name": "Team1 Student2",
   "email": "ctc-t1-s2",
   "contribution": {
      "score": 16.6,
      "comment": "From 'Team1 Student2' about 'Team1 Student2'\nAnd they said, \"You'll never get it done!\""
   }
}
,{
   "name": "Team1 Student4",
   "email": "mmi-t1-s4",
   "contribution": {
      "score": 0.4,
      "comment": "From 'Team1 Student2' about 'Team1 Student4'\nAnd they said, \"You'll never get it done!\""
   }
}
,{
   "name": "Team1 Student3",
   "email": "pco-t1-s3",
   "contribution": {
      "score": 39.1,
      "comment": "From 'Team1 Student2' about 'Team1 Student3'\nAnd they said, \"You'll never get it done!\""
   }
}
,{
   "name": "Team1 Student1",
   "email": "eyr-t1-s1",
   "contribution": {
      "score": 23.9,
      "comment": "From 'Team1 Student2' about 'Team1 Student1'\nAnd they said, \"You'll never get it done!\""
   }
}],"confidential_comments": "That's all! It was \"fun\"! (said Team1 Student2)\nDon't forget: Bring your towel \\ the cake is a lie."}

现在我有三个班级,其中一个是小组班级:

  public class Group {
   private List<Student> group[];

   public Group(List<Student> students[]){
       this.group =  students;
    }

    public void setStudents(List<Student> students[]) {
        this.group = students;
    }

    public List<Student>[] getStudents() {
        return group;
    }

    @Override
    public String toString() {
        return "Group{" +
                "students=" + Arrays.toString(group) +
                '}';
    }
}

还有一个学生班:

public class Student {
    private String name;
    private String sfu_email;

    public Student(String name, String email){
        this.name = name;
        this.sfu_email = email;
    }


    public String getName() {
        return name;
    }

    public String getEmail(){
        return sfu_email;
    }

    public void setEmail(String email) {
        this.sfu_email = email;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString(){
        return getName() + " " + getName();
    }
}

在我的 main 函数中,当我运行它时,我最终会打印一个 NULL 对象。

 Gson gson = new Gson();

        JsonParser jsonParser = new JsonParser();

        try(Reader reader = new FileReader("FILE PATH")) {
            JsonElement jsonObject = jsonParser.parse((reader));
            System.out.println(jsonObject);

            Group students = gson.fromJson(jsonObject, Group.class);
            System.out.println(students);
            Student student = gson.fromJson(jsonObject, Student.class);
            System.out.println(student);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

我想知道如何解析输入文件,以便将 JSON 字符串放入对象或对象列表中?对不起,很长的问题。

【问题讨论】:

    标签: java json string gson


    【解决方案1】:

    Group 类包含List&lt;Student&gt;,同样不需要在group 变量名的末尾添加[]

      public class Group {
    
        private List<Student> group;
    
        public void setStudents(List<Student> students) {
            this.group = students;
        }
    
        public List<Student> getStudents() {
            return group;
        }
    
        @Override
        public String toString() {
            return "Group [group=" + group + "]";
        }
    }
    

    确保类中的字段名称需要与 JSON 匹配。

    public class Student {
        private String name;
        private String email; //sfu_email changed to email
    
        public Student(String name, String email) {
            this.name = name;
            this.email = email;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", email=" + email + "]";
        }
    

    尝试上述解决方案。

    【讨论】:

      【解决方案2】:

      我认为问题出在您的 JSON 中 group 已经是 List&lt;Student&gt;,但您正试图从 gson 检索组对象。我认为您需要的是一个不同的对象,例如 ReaderResponse,如下所示:

      class Response {
          private Group group;
      }
      

      然后执行以下操作:

      Response response = gson.fromJson(jsonObject, Response.class);
      Group = response.getGroup();
      

      请注意,要使 GSON 正常工作,类中的字段名称需要与 JSON 匹配。 (所以 Student 中的 sfu_email 应该按照 JSON 读取 email)。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多