Search code examples
javajsonjsonserializerflexjson

How to exclude null-value fields when using Flexjson?


I am serializing a class like this into JSON using Flexjson:

public class Item {
    private Long id;
    private String name;
    private String description;
    ...

    // Getters and setters
    ...
}

Many of the Item fields can be null (e.g., description). Consequently, when such an Item object is serialized using Flexjson, I get the following JSON:

 {"id":62,"name":"Item A","description":null,...}

Since, as I already mentioned, an Item object may contain many null-value fields, the outcoming JSON is longer than effectively needed. This is in so far a problem, because I would like to send the generated JSON from a web server to a mobile client over a wireless connection via WiFi, 3G, EDGE or GPRS (i.e., more bandwidth is required, which results in less speed).

Therefore, I wanted to ask how it is possible to (efficiently) exclude null-value attributes using Flexjson?

Thanks!


Solution

  • You can use the following transformer :

    import flexjson.transformer.AbstractTransformer;
    
    public class ExcludeTransformer extends AbstractTransformer {
    
      @Override
      public Boolean isInline() {
          return true;
      }
    
      @Override
      public void transform(Object object) {
          // Do nothing, null objects are not serialized.
          return;
      }
    }
    

    with the following usage :

    new JSONSerializer().transform(new ExcludeTransformer(), void.class).serialize(yourObject)
    

    Note that all null fields will be excluded.

    Adding the Transformer by Path (vs by Class) is not supported as FlexJSON forces TypeTransformer for null values :

    JSONContext.java : line 95 :

    private Transformer getPathTransformer(Object object) {
        if (null == object) return getTypeTransformer(object);
        return pathTransformerMap.get(path);
    }