Java 如何让GSON省略null或空对象以及空数组和列表?

Java 如何让GSON省略null或空对象以及空数组和列表?,java,json,gson,Java,Json,Gson,我使用的是Gson,我的处境是必须缩小某些Json字符串的大小。我希望通过让它不将空对象、空值、空列表和数组放入Json字符串来实现这一点 有没有一个简单的方法可以做到这一点 让我澄清一点:我希望跳过所有显示:emptyProp:{}或emptyArray:[]的内容。我希望跳过任何只包含空属性的对象。默认情况下,只要不将serializeNulls()设置为GsonBuilder,空值将被排除 空列表的一种方法是创建JsonSerializer class CollectionAdapter

我使用的是Gson,我的处境是必须缩小某些Json字符串的大小。我希望通过让它不将空对象、空值、空列表和数组放入Json字符串来实现这一点

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


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

默认情况下,只要不将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;
  }
}
根据HashMap,可以通过以下方式序列化:


class MapAdapter实现JSONSerializerSN这不是默认行为吗?不,它放入空数组,等等。“它放入空数组,等等…”--???我建议发布一个关于你所说内容的完整的最小示例。文档说,“在序列化过程中,从输出中跳过一个空字段”(但如果这不正确,我也不会感到惊讶)。然后我有点困惑:“不放空对象,只放空值…”“only”在这里是什么意思?是否要包含空值等?是否要包含空值等?我希望排除空值,例如空字符串。是否确定上述代码正确?当我尝试它时,它似乎不会影响任何东西?是的,这对我来说也不起作用,直到我将
集合
更改为
列表
,然后它起作用,因为shouldI还添加了另一个实现JsonSerializer的类。这将处理中的空对象{}JSON@mdev我们如何扩展它以忽略空字符串和空列表?
Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();