java - 使用 Gson 从 JSON 数组中排除空对象

标签 java serialization gson

我正在使用 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/

相关文章:

java - 如果 json 数组为空,Gson getAsString() 失败

android - JSON 在 GSON 中解析的初始大写 key 问题

java - 平台命令框架与平台 UI 命令设计

java - DHTMLX 调度程序日期和时间未保存到数据库

c++ - 序列化对象时 BOOST_SERIALIZATION_NVP 做了什么?

json - 在 .net 4.5 标准序列化程序中定义时间跨度格式

java - [Android]Google Gson 崩溃应用

java - 从 InputStream 读取并写入 OutputStream

java - 这个程序需要多个ArrayList吗?

python - Django 休息框架用户注册?