可以用com.alibaba.fastjson.serializer.PropertyFilter
来处理这种情况,实例代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.PropertyFilter;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class MainFastJSONEmptyCase {
// 过滤掉null/空数组,空字符串,空List,空Map
private static PropertyFilter filter = new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
if (value == null) {
return false;
}
if (value.getClass().isArray()) {
if (Array.getLength(value) == 0) {
return false;
}
}
if (value instanceof String && ((String) value).isEmpty()) {
return false;
}
if (value instanceof List && ((List) value).size() == 0) {
return false;
}
if (value instanceof Map && ((Map) value).size() == 0) {
return false;
}
return true;
}
};
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
map.put("list", list);
System.out.println(JSON.toJSONString(map, filter));
}
}
输出如下:
{}
这种技巧可以有效的减少数据传输大小,但是业务上要注意null和空数组的差异,以免出现NPE。