Как удалить вложенное поле объекта Json с помощью Gson - PullRequest
1 голос
/ 12 апреля 2019

Мой JSON ответ:

{
    "date": 1555044585641,
    "changed": true,
    "data": {
        "items": [
            {
               "id": 503,
                "activated": false,
                "view": {
                    "listItem": {
                        ...
                    },
                    "details": {
                        ...
                    }
                }       
            }
        ]
    }
}

Я использую класс ниже для анализа JSON, используя Gson:

public class Response {

    @SerializedName("date")
    public long date;

    @SerializedName("changed")
    public boolean changed;

    @SerializedName("data")
    public JsonObject data;
}

Я сохраняю часть данных какстрока, использующая data.toString(), поскольку данные JsonObject.Мой вопрос:

Как исключить часть "детали" перед сохранением?

Сохраненная строка должна выглядеть следующим образом:

{
    "items": [
        {
           "id": 503,
            "activated": false,
            "view": {
                "listItem": {
                    ...
                }
            }       
        }
    ]
}

1 Ответ

1 голос
/ 12 апреля 2019

Вам необходимо пройти по JSON структуре, используя JsonElement, JsonArray, JsonObject:

class Response {

    @SerializedName("date")
    public long date;

    @SerializedName("changed")
    public boolean changed;

    @SerializedName("data")
    public JsonObject data;

    public void removeDetails() {
        JsonElement items = data.get("items");
        if (!items.isJsonArray()) {
            return;
        }
        JsonArray array = items.getAsJsonArray();
        array.forEach(item -> {
            if (item.isJsonObject()) {
                JsonObject node = item.getAsJsonObject();
                JsonElement view = node.get("view");
                if (view.isJsonObject()) {
                    view.getAsJsonObject().remove("details");
                }
            }
        });
    }
}

После десериализации вызовите removeDetails(), и вы сможете сохранить только необходимые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...