仅在不为null或不为空的情况下,Gson序列化字段

我有需要将Java对象转换为json的要求。

我为此使用Gson,但我需要转换器仅序列化非null或非空值。

例如:

//my java object looks like

class TestObject{

String test1;

String test2;

OtherObject otherObject = new OtherObject();

}

现在我的Gson实例将此对象转换为json看起来像

Gson gson = new Gson();

TestObject obj = new TestObject();

obj.test1 = "test1";

obj.test2 = "";

String jsonStr = gson.toJson(obj);

println jsonStr;

在上面的打印中,结果是

{"test1":"test1", "test2":"", "otherObject":{}}

在这里我只是希望结果是

{"test1":"test1"}

由于test2为空,otherObject为空,我不希望它们被序列化为json数据。

顺便说一句,我使用的是Groovy / Grails,因此,如果有任何对此的插件会很好,如果没有关于自定义gson序列化类的建议,那将是很好的。

回答:

创建自己的 TypeAdapter

public class MyTypeAdapter extends TypeAdapter<TestObject>() {

@Override

public void write(JsonWriter out, TestObject value) throws IOException {

out.beginObject();

if (!Strings.isNullOrEmpty(value.test1)) {

out.name("test1");

out.value(value.test1);

}

if (!Strings.isNullOrEmpty(value.test2)) {

out.name("test2");

out.value(value.test1);

}

/* similar check for otherObject */

out.endObject();

}

@Override

public TestObject read(JsonReader in) throws IOException {

// do something similar, but the other way around

}

}

然后,您可以使用进行注册Gson

Gson gson = new GsonBuilder().registerTypeAdapter(TestObject.class, new MyTypeAdapter()).create();

TestObject obj = new TestObject();

obj.test1 = "test1";

obj.test2 = "";

System.out.println(gson.toJson(obj));

产生

 {"test1":"test1"}

GsonBuilder班有一堆的方法来创建自己的序列化/反序列化战略,注册类型的适配器,等参数进行设置。

Strings是番石榴课。如果您不需要这种依赖性,则可以自己进行检查。

以上是 仅在不为null或不为空的情况下,Gson序列化字段 的全部内容, 来源链接: utcz.com/qa/417238.html

回到顶部