gson: обрабатывать пустую строку как ноль - PullRequest
2 голосов
/ 25 марта 2020

Я использую gson для сериализации java объекта в json.

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

Этот конструктор обрабатывает нулевые значения, что хорошо. Но наряду с этим я хочу, чтобы он обрабатывал пустую строку также как ноль.

Как это можно сделать?

1 Ответ

0 голосов
/ 26 марта 2020

Вам потребуется зарегистрировать пользовательский TypeAdapter , который упаковывает существующий String TypeAdapter и заменяет пустые строки JSON null.

Пример кода:

public static void main(String[] args) {
    Gson gson = createGson();
    System.out.println(gson.toJson(Arrays.asList("foo","bar","",null,"phleem")));
}

static Gson createGson() {
    return new GsonBuilder().serializeNulls()
                            .registerTypeAdapter(String.class,
                                                 new EmptyToNullTypeAdapter())
                            .create();

}

static class EmptyToNullTypeAdapter extends TypeAdapter<String> {

    @Override
    public void write(final JsonWriter out, final String value) throws IOException {
        if (value.isEmpty()) {
            out.nullValue();
        } else {
            TypeAdapters.STRING.write(out, value);
        }
    }

    @Override
    public String read(final JsonReader in) throws IOException {
        return TypeAdapters.STRING.read(in);
    }

}

Вывод:

["foo", "bar", null, null, "phleem"]

Предостережение

Наконец: не уверен, что это хорошая идея, потому что это асимметричное c решение, т.е. когда вы десериализуете объект, а затем сериализуете его снова, ваш новый объект выиграл ' не может быть равным исходному объекту (пустым вместо пустых строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...