最简单的方法是什么? 我想序列化整数值,无论零或非零,但我也想要排除其他(非int)空值。 如果我使用这种方法
Gson gson = new GsonBuilder().serializeNulls().create();
然后我序列化整数零和其他null(不是我需要的)。
可能我需要澄清这个问题。例如,如果我有一个班级
class SomeClass {
private int shift;
private SomeClass2 additionalData;
}
所以,我想序列化这个类对象,即使它是零,也总是显示int字段,但是只有当它不为null时才应显示additionalData。
答案 0 :(得分:0)
默认情况下,Gson启用了“空对象支持”,它将跳过对象中的空字段。但是如果传递的引用是null
,那么Gson将序列化"null"
。请参阅Gson User Guide - Null Object Support。
如果序列化整数Map,则跳过映射为null的条目;但在序列化列表或数组时,不会跳过null
。
您可以先将其从集合中过滤掉,然后跳过空值;见例如。以下
package stackOv;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class UseGson {
public static void main(String[] args) {
Integer array[] = new Integer[]{1,2,null,34};
List<?> list = Arrays.asList(array);
List<?> list2 =
list.stream()
.filter(x->x!=null)
.collect(Collectors.toList());
Gson gson = new GsonBuilder().create() ;
System.out.println( gson.toJson(list));
System.out.println( gson.toJson(list2));
}
}
(来自指南)
json = gson.toJson(null);
System.out.println(json);
======== OUTPUT ========
null
答案 1 :(得分:0)
我希望我解决了这个问题:重点是将int字段显式设置为0,否则(非初始化)将其视为null:要么滑雪(如果没有使用serializeNulls()),要么编码为&# 34;空&#34;