你如何让GSON省略空或空对象并清空数组和列表?

Joe*_*Joe 17 java json gson

我正在使用Gson,我处于一种必须缩小某些Json字符串大小的情况.我想通过让它不将空对象,空值和空列表和数组放入Json字符串来实现.

有一种直截了当的方法吗?

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

Pom*_*Pom 28

默认情况下,只要不将serializeNulls()设置为GsonBuilder,就会排除空值.

空列表的一种方法是创建一个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后注册

Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();
Run Code Online (Sandbox Code Playgroud)

  • 是的,这对我来说也不起作用,直到我将`Collection <?>`更改为`List <?>`然后它就像应该 (2认同)