为了账号安全,请及时绑定邮箱和手机立即绑定

GSON 输出空数组值

GSON 输出空数组值

繁星淼淼 2023-09-06 16:40:52
这是我的 GSON 实例,因为您看不到 serializeNulls()。private static final Gson GSON = new GsonBuilder().create();这就是我生成 json 的方式:object.add("inventory", GSON.toJsonTree(inventory.getItems()));物品:private int id;private int amount;public Item(int id, int amount) {    this.id = id;    this.amount = amount;}输出:"inventory": [{  "id": 13  "amount": 1,},null,null,null,null,null,null,null,null,null,null,null],我也尝试创建一个适配器,但没有成功:@Overridepublic JsonElement serialize(Item src, Type typeOfSrc, JsonSerializationContext context) {    System.out.println(src); // This only prints valid values, no nulls...    return new Gson().toJsonTree(src, src.getClass());}为什么输出包含空值以及如何消除它们?
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可以像这样编写自定义 JSON 序列化器适配器:


public class CustomJsonArraySerializer<T> implements JsonSerializer<T[]> {

    @Override

    public JsonElement serialize(T[] source, Type type, JsonSerializationContext context) {

        JsonArray jsonArray = new JsonArray();

        for(T item : source){

            if(item != null) { // skip null values

                jsonArray.add(context.serialize(item));

            }

        }

        return jsonArray;

    }

}

您可以像这样注册这个自定义序列化器采用者:


private static final Gson GSON = new GsonBuilder().registerTypeAdapter(Item[].class, new CustomJsonArraySerializer<>()).create();

现在,当您序列化它时,Item[]它将忽略这些null值。


测试:


Item[] items = {new Item(10, 20), null, null, null, new Item(50, 60)};

JsonElement jsonElement = GSON.toJsonTree(items);

System.out.println(jsonElement);

输出:


[{"id":10,"amount":20},{"id":50,"amount":60}]


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信