Gson игнорирует записи карты со значением = null

132
Gson gson = new Gson();

Map<String,Object> map = new HashMap<String, Object>();
map.put("a", 1);
map.put("b", null);

System.out.println(gson.toJson(map)); //prints {"a":1}

Как мне включить в него все записи?

M2O
источник

Ответы:

299

См. Руководство пользователя Gson - Поддержка нулевых объектов :

Поведение по умолчанию, реализованное в Gson, заключается в том, что поля нулевого объекта игнорируются. Это позволяет получить более компактный выходной формат; однако клиент должен определить значение по умолчанию для этих полей, поскольку формат JSON преобразуется обратно в форму Java.

Вот как бы вы настроили экземпляр Gson для вывода null:

Gson gson = new GsonBuilder().serializeNulls().create();
Алоис Кочар
источник
10
Руководство должно быть более оптимизировано для поиска. Я не собираюсь читать все, когда использую небольшое количество подвигов. Это был первый результат в Google. Исправлена ​​моя проблема.
Mathijs Segers
1
@MathijsSegers Некоторые фантастические библиотеки не имеют документации. Имея так много проблем с просмотром их исходного кода (который опять же с множеством шаблонов компоновщика и всего).
pinkpanther
13
@MathijsSegers И в этом прелесть SO и Google. Я могу погуглить "gson ignore null" и найти ответ за 3 секунды, вместо того, чтобы искать в нем руководство и ответ.
joshden
2
Как включить только одно поле NULL, а не все поля NULL внутри класса? Можно ли добавить аннотацию над обязательным полем?
Салам Эль-Банна
это решение кажется разумным, и я ожидал, что оно сработает! но это не так! Любые идеи?
Арман Рамезанзаде