Gson:需要序列化整数零但排除其他空值

时间:2018-06-09 08:53:37

标签: java serialization gson

最简单的方法是什么? 我想序列化整数值,无论零或非零,但我也想要排除其他(非int)空值。 如果我使用这种方法

Gson gson = new GsonBuilder().serializeNulls().create();

然后我序列化整数零和其他null(不是我需要的)。

可能我需要澄清这个问题。例如,如果我有一个班级

class SomeClass {
    private int shift;
    private SomeClass2 additionalData; 
}

所以,我想序列化这个类对象,即使它是零,也总是显示int字段,但是只有当它不为null时才应显示additionalData。

2 个答案:

答案 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;

相关问题