我正在使用Gson,我處於一種情況,我必須縮小某些Json字符串的大小。我希望通過讓它不將null對象,只有空值和空列表和數組放入Json字符串中來實現。如何讓GSON忽略空或空對象以及空陣列和列表?
有沒有簡單的方法來做到這一點?讓我澄清一下:我希望所有說:emptyProp:{}或emptyArray:[]被跳過。我想要任何只包含空的屬性的對象被跳過。
我正在使用Gson,我處於一種情況,我必須縮小某些Json字符串的大小。我希望通過讓它不將null對象,只有空值和空列表和數組放入Json字符串中來實現。如何讓GSON忽略空或空對象以及空陣列和列表?
有沒有簡單的方法來做到這一點?讓我澄清一下:我希望所有說:emptyProp:{}或emptyArray:[]被跳過。我想要任何只包含空的屬性的對象被跳過。
默認情況下排除空值,只要您不將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();
你確定上述代碼是正確的嗎?當我嘗試它時,似乎沒有影響任何東西? – bashoogzaad 2015-07-15 14:13:30
是的,直到我將'Collection >'更改爲'列表>',這對我來說才起作用,然後它就像應該那樣工作 – 2015-12-05 23:52:24
根據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;
}
}
是不是默認行爲? – mhusaini 2012-08-13 20:58:04
不,它放入空陣列等。 – Joe 2012-08-13 21:31:46
「它放入空陣列等」 - ?我建議發佈你正在談論的完整的最簡單的例子。該文檔說,「序列化時,從輸出中跳過空字段」(但如果這不正確,我不會感到驚訝)。 – 2012-08-13 22:30:48