GSON Java Сериализация объекта - PullRequest
0 голосов
/ 07 мая 2020

Я записываю объект в 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+",
          }
    ]
}

I я ищу JSON вот так:

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

Я не хочу создавать для этого дополнительный класс. Есть идеи, как я могу изменить свою функцию записи или предоставляет ли GSON какое-либо свойство для этого?

1 Ответ

1 голос
/ 08 мая 2020

Вы должны изменить свой метод, чтобы он выглядел следующим образом

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

Пояснение:

  • Создать объект Json для class.
  • Создать json Объект для student.
  • Составить students JsonElement, используя string.
  • Поместите студентов в объект studentJosn
  • Поместите объект jsonObject студента в класс
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...