问题
I am using Gson and I am in a situation in which I have to shrink the size of certain Json strings. I would like to do so by getting it to not put null objects, only empty values, and empty lists and arrays into the Json string.
Is there a straightforward way to do that?
Let me clarify a bit: I want everything that says: emptyProp:{} or emptyArray:[] to be skipped. I want any object that only contains properties that are empty to be skipped.
回答1:
Null values are excluded by default as long as you don't set serializeNulls() to your GsonBuilder.
A way for empty lists is to create a 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;
}
}
Then register it
Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();
回答2:
According to PomPom a HashMap can serialized via:
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;
}
}
来源:https://stackoverflow.com/questions/11942118/how-do-you-get-gson-to-omit-null-or-empty-objects-and-empty-arrays-and-lists