gpt4 book ai didi

java - Gson序列化字段仅当不为空或不为空时

转载 作者:行者123 更新时间:2023-12-05 07:39:43 35 4
gpt4 key购买 nike

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

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

例如:

//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 是一个 Guava 类。如果您不想要这种依赖性,您可以自己检查。

关于java - Gson序列化字段仅当不为空或不为空时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888322/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com