Подтвердить что ты не робот

Как вы получаете GSON для пропуска пустых или пустых объектов и пустых массивов и списков?

Я использую Gson, и я в ситуации, когда мне приходится сокращать размер определенных строк Json. Я хотел бы сделать это, заставив его не поместить в строку Json нулевые объекты, только пустые значения и пустые списки и массивы.

Есть ли простой способ сделать это?

Позвольте мне немного пояснить: мне нужно все, что говорит: emptyProp: {} или emptyArray: [] для пропуска. Я хочу, чтобы любой объект содержал только те свойства, которые пуст для пропуска.

4b9b3361

Ответ 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;
        }
    }