GSON выводит нулевые значения массива - PullRequest
1 голос
/ 27 сентября 2019

Это мой экземпляр GSON, так как вы не видите serializeNulls ().

private static final Gson GSON = new GsonBuilder().create();

Вот как я генерирую json:

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

Item:

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
],

Я также пытался создать адаптер, но безуспешно:

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

Почему выходные данные содержат нули и как я могу избавиться от них?

1 Ответ

1 голос
/ 27 сентября 2019

Вы можете написать собственный адаптер сериализатора 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}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...