使用Java中的GSON从JSON数组中删除嵌套元素

时间:2018-01-15 17:27:49

标签: java json gson

我正在调用REST服务并获取JSON响应并存储它。但是,我不需要JSON响应中的所有字段。我想知道无论如何我都可以使用Java中的GSON从JSON数组中删除一个元素。

例如,假设我有以下JSON:

{
    "array": [{
            "text": "hello world",
            "test": {
                "Testing": "testing"
            }
        }
    ]
}

如何从JSON数组中删除字段“text”?我环顾四周但找不到任何特定于使用GSON的东西(我正在使用它来解析JSON并添加自定义元素)。我试过“data.getAsJsonArray(”array“)。remove(0);”但它删除了我的数组中的所有内容。

1 个答案:

答案 0 :(得分:0)

即使这不是针对该问题的GSON解决方案,我也会使用JSONPath库来解决这个问题。

如果您使用Maven,可以使用以下命令导入库:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path -->
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>

然后,您只需使用JSONPath库删除属性:

try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("replaceExample.json")) {
    String json = new Scanner(in).useDelimiter("\\Z").next();
    DocumentContext dc = JsonPath.parse(json).delete("$..text");
    System.out.println(dc.jsonString());
}

假设replaceExample.json包含您的问题JSON,则打印出来:

{"array":[{"test":{"Testing":"testing"}}]}