我正在使用 Gson 解析对 Java 对象的 REST API 调用。
我想过滤掉数组中的空对象,例如
{
list: [
{"key":"value1"},
null,
{"key":"value2"}
]
}
应该产生 List<SomeObject>
有 2 件商品。
如何使用 Gson 做到这一点?
最佳答案
答案:自定义序列化程序
您可以为 List.class
添加自定义序列化程序,如下所示:
package com.dominikangerer.q27637811;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class RemoveNullListSerializer<T> implements JsonSerializer<List<T>> {
@Override
public JsonElement serialize(List<T> src, Type typeOfSrc,
JsonSerializationContext context) {
// remove all null values
src.removeAll(Collections.singleton(null));
// create json Result
JsonArray result = new JsonArray();
for(T item : src){
result.add(context.serialize(item));
}
return result;
}
}
这将使用 Collections.singleton(null)
和 removeAll()
从列表中删除 null
值。
注册您的自定义序列化程序
现在您所要做的就是将其注册到您的 Gson 实例,如下所示:
g = new GsonBuilder().registerTypeAdapter(List.class, new RemoveNullListSerializer()).create();
可下载且可执行的示例
您可以在我的 github stackoverflow 答案存储库中找到这个答案和确切的示例:
Gson CustomSerializer to remove Null from List by DominikAngerer
另请参阅
关于java - 使用 Gson 从 JSON 数组中排除空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637811/