Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Gson删除Json对象的嵌套字段_Java_Json_Gson - Fatal编程技术网

Java 如何使用Gson删除Json对象的嵌套字段

Java 如何使用Gson删除Json对象的嵌套字段,java,json,gson,Java,Json,Gson,我的JSON响应: { "date": 1555044585641, "changed": true, "data": { "items": [ { "id": 503, "activated": false, "view": { "listItem": {

我的
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": {
                    ...
                }
            }       
        }
    ]
}

您需要使用
JsonElement
JsonArray
JsonObject
遍历
JSON
结构:

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()
,您只能保存所需的数据