Как вы получаете GSON для пропуска пустых или пустых объектов и пустых массивов и списков?
Я использую Gson, и я в ситуации, когда мне приходится сокращать размер определенных строк Json. Я хотел бы сделать это, заставив его не поместить в строку Json нулевые объекты, только пустые значения и пустые списки и массивы.
Есть ли простой способ сделать это?
Позвольте мне немного пояснить: мне нужно все, что говорит: emptyProp: {} или emptyArray: [] для пропуска. Я хочу, чтобы любой объект содержал только те свойства, которые пуст для пропуска.
Ответы
Ответ 1
Значения Null по умолчанию исключаются, если вы не устанавливаете serializeNulls() в свой GsonBuilder.
Пустым списком является создание JsonSerializer
class CollectionAdapter implements JsonSerializer<Collection<?>> {
@Override
public JsonElement serialize(Collection<?> src, Type typeOfSrc, JsonSerializationContext context) {
if (src == null || src.isEmpty()) // exclusion is made here
return null;
JsonArray array = new JsonArray();
for (Object child : src) {
JsonElement element = context.serialize(child);
array.add(element);
}
return array;
}
}
Затем зарегистрируйте его
Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();
Ответ 2
Согласно PomPom, HashMap может сериализоваться через:
class MapAdapter implements JsonSerializer<Map<?, ?>> {
@Override
public JsonElement serialize(Map<?, ?> src, Type typeOfSrc,JsonSerializationContext context) {
if (src == null || src.isEmpty())
return null;
JsonObject obj = new JsonObject();
for (Map.Entry<?, ?> entry : src.entrySet()) {
obj.add(entry.getKey().toString(), context.serialize(entry.getValue()));
}
return obj;
}
}