如何让GSON省略空或空对象以及空数组和列表?
我正在使用Gson,并且我处于必须缩小某些Json字符串大小的情况下。我想通过让它不将空对象,仅空值以及空列表和数组放入Json字符串来做到这一点。
有没有一种直接的方法可以做到这一点?
让我澄清一下:我希望跳过所有说:emptyProp:{}或aubarray:[]的内容。我希望跳过任何仅包含空属性的对象。
我正在使用Gson,并且我处于必须缩小某些Json字符串大小的情况下。我想通过让它不将空对象,仅空值以及空列表和数组放入Json字符串来做到这一点。
有没有一种直接的方法可以做到这一点?
让我澄清一下:我希望跳过所有说:emptyProp:{}或aubarray:[]的内容。我希望跳过任何仅包含空属性的对象。
默认情况下,只要您不将序列化Nulls()设置为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;
}
}
然后注册
Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();
根据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;
}
}