Java GSON输出空数组值

Java GSON输出空数组值,java,gson,Java,Gson,这是我的GSON实例,因为您看不到任何序列化Nulls() 我就是这样生成json的: object.add("inventory", GSON.toJsonTree(inventory.getItems())); 项目: 输出: "inventory": [ { "id": 13 "amount": 1, }, null, null, null, null, null, null, null, null, null, null, null ], 我还尝试创建适配器,但没有成功: @

这是我的GSON实例,因为您看不到任何序列化Nulls()

我就是这样生成json的:

object.add("inventory", GSON.toJsonTree(inventory.getItems()));
项目:

输出:

"inventory": [
{
  "id": 13
  "amount": 1,
},
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
],
我还尝试创建适配器,但没有成功:

@Override
public 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());
}

为什么输出包含空值?我如何消除这些空值?

您可以编写如下自定义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[] 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}]

inventory.getItems()
列表中有多少项?我可以看到它已经将一个元素正确地转换为JSON,它能够正确地转换所有非空元素。对于测试,我只有一项。所以您只想跳过
null
值?是的。但是我不确定是否可以使用数组。可能您没有编写正确的适配器。检查我的答案。谢谢,这正是我一直在寻找的,直到我意识到我需要库存的插槽。。所以最后我使用了一个HashMap并将插槽存储为键。然而,我会在其他事情上充分利用这一点@不客气。而且,它可能对将来寻找此类功能的其他人很有用。
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}]