【问题标题】:GSON Java Object SerializationGSON Java 对象序列化
【发布时间】:2020-05-07 20:32:51
【问题描述】:

我正在将一个对象写入 JSON 文件。想知道如何在对象中添加父元素或在 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);
    }

这会在 Json 中生成学生列表

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

我正在寻找这样的 JSON:

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

我不想为此创建一个额外的类。知道如何更改我的写入功能,或者 GSON 是否为此提供了任何属性?

【问题讨论】:

  • 你不想创建新课程的原因是什么?

标签: java json serialization gson


【解决方案1】:

你必须修改你的方法看起来像这样

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

学生POJO课

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;
        }
    }

这就是你的分类方式

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

解释:

  • class创建Json对象。
  • student创建json对象。
  • 使用字符串编写students JsonElement。
  • 将学生放入 studentJosn 对象中
  • 将学生jsonObject放入课堂

【讨论】:

  • 感谢@silentsudo 的回复。如果我在 POJO 类中有 List 怎么办?
  • 你最初的问题是不使用类,我问什么停止使用它,如果你使用 pojo 类是可行的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
相关资源
最近更新 更多