Почему Gson печатает на консоли, а не в файле? - PullRequest
0 голосов
/ 30 января 2019

У меня есть класс, назовем его Cls, с некоторыми значениями в нем.Когда я использую экземпляр Gson, объявленный с помощью GsonBuilder.setPrettyPrinting().create(), и использую его для сериализации объекта Cls и вывода полученной строки JSON на консоль, я получаю его красиво отформатированный, например:

{
    "foo":"bar",
    "foo2":["b1","b2"],
    "foo3":12
}

Это все хорошои хорошо, но когда я затем создаю JsonWriter (из FileWriter с абсолютным путем) и использую метод toJson(Object, Class, JsonWriter) экземпляра Gson с Cls, результирующий файл НЕ форматируется красиво.Вместо этого это выглядит так:

{"foo":"bar","foo2":["b1","b2"],"foo3":12}

Это побеждает весь смысл красивой печати.Почему это происходит, и как я могу остановить это?

1 Ответ

0 голосов
/ 30 января 2019

Предположительно, вы используете что-то вроде этого

Gson gson = new GsonBuilder().setPrettyPrinting().create();

try (FileWriter fileWriter = ...) {
    gson.toJson(new Example(), Example.class, new JsonWriter(fileWriter));
}

JsonWriter не был создан из объекта Gson и поэтому не настроен для красивой печати.Вместо этого вы можете извлечь экземпляр JsonWriter из объекта Gson с помощью newJsonWriter

gson.toJson(new Example(), Example.class, gson.newJsonWriter(fileWriter));

, который

Возвращает новый JSONWriter сконфигурирован для настроек этого экземпляра Gson.

Этот экземпляр будет красиво напечатан.

Вы также можете установить indent для своего собственного экземпляра

JsonWriter jsonWriter = new JsonWriter(fileWriter);
jsonWriter.setIndent("  ");
gson.toJson(new Example(), Example.class, jsonWriter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...