19

我正在使用 Gson,并且我必须缩小某些 Json 字符串的大小。我想通过让它不将空对象、空值以及空列表和数组放入 Json 字符串来做到这一点。

有没有一种简单的方法可以做到这一点?

让我澄清一下:我希望跳过所有内容:emptyProp:{} 或 emptyArray:[]。我希望跳过任何只包含空属性的对象。

4

2 回答 2

32

只要您不将 serializeNulls() 设置为 GsonBuilder,就会默认排除 Null 值。

空列表的一种方法是创建一个 JsonSerializer

class CollectionAdapter implements JsonSerializer<List<?>> {
  @Override
  public JsonElement serialize(List<?> 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();
于 2013-06-13T14:27:40.143 回答
1

根据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;
        }
    }
于 2017-05-11T09:03:33.590 回答