Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
948 views
in Technique[技术] by (71.8m points)

java - How do you get GSON to omit null or empty objects and empty arrays and lists?

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...