java – Gson序列化字段只有在不为null或不为空 - 代码日志

java – Gson序列化字段只有在不为null或不为空

我需要将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数据。

Btw,我使用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类有一些方法来创建自己的序列化/反序列化策略,注册类型适配器和设置其他参数。

弦是番石榴课。你是否拥有检查,如果你不想要依赖。

http://stackoverflow.com/questions/18491733/gson-serialize-field-only-if-not-null-or-not-empty

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – Gson序列化字段只有在不为null或不为空