简体   繁体   English

GSON Java Object 序列化

[英]GSON Java Object Serialization

I am writing a object to JSON file.我正在将 object 写入 JSON 文件。 Want to know how can I add parent element in object OR just add parent element in JSON file.想知道如何在 object 中添加父元素或仅在 JSON 文件中添加父元素。

    public void writeToJSON(Path dest, Student studentJSON) throws IOException {
        Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
        try (PrintWriter wr = new PrintWriter(Files.newBufferedWriter(dest))) {
        gson.toJson(studentJSON, wr);
    }

This produces student list in Json as这会在 Json 中生成学生列表

{
    "students": [
          {
            "Name": "foo",
            "Grade": "A"
          },
          {
            "Name": "bar",
            "Grade": "B+",
          }
    ]
}

I am looking for a JSON like this:我正在寻找这样的 JSON:

{
    "class" : {
        "students": [
              {
                "Name": "foo",
                "Grade": "A"
              },
              {
                "Name": "bar",
                "Grade": "B+",
              }
        ]
    }
}

I don't want to create an additional class for this.我不想为此创建一个额外的 class 。 Any idea how can I change my write function or if GSON provides any property for this?知道如何更改我的写入 function 或者 GSON 是否为此提供任何属性?

You have to modify you method to look like this你必须修改你的方法看起来像这样

public static void writeToJSON(Path dest, List<Student> studentJSON) throws IOException {
        Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
        try (PrintWriter wr = new PrintWriter(Files.newBufferedWriter(dest))) {
            JsonElement jsonElement = gson.toJsonTree(studentJSON);
            JsonObject classObject = new JsonObject();
            JsonObject studentsObject = new JsonObject();
            studentsObject.add("students", jsonElement);
            classObject.add("class", studentsObject);
            gson.toJson(classObject, wr);
        }
    }

Student POJO class学生POJO class

class Student {
        public Student(String name, String grade) {
            this.name = name;
            this.grade = grade;
        }

        @SerializedName("Name")
        String name;
        @SerializedName("Grade")
        String grade;

        public String getName() {
            return name;
        }

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

        public String getGrade() {
            return grade;
        }

        public void setGrade(String grade) {
            this.grade = grade;
        }
    }

This is how would you class it fo这就是你如何 class 它

List<Student> students = new ArrayList<>();
students.add(new Student("silentsudo", "A+"));
students.add(new Student("random", "C+"));
writeToJSON(Paths.get("/home/usertest.json"), students);

Explanation:解释:

  • Create Json object for class .为 class 创建 Json class
  • Create json Object for student .student创建 json Object 。
  • Compose students JsonElement using string.使用字符串编写students JsonElement。
  • Put students in studentJosn Object把学生放在 studentJosn Object
  • Put student jsonObject into class将学生jsonObject放入class

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM