我正在调用REST服务并获取JSON响应并存储它。但是,我不需要JSON响应中的所有字段。我想知道无论如何我都可以使用Java中的GSON从JSON数组中删除一个元素。
例如,假设我有以下JSON:
{
"array": [{
"text": "hello world",
"test": {
"Testing": "testing"
}
}
]
}
如何从JSON数组中删除字段“text”?我环顾四周但找不到任何特定于使用GSON的东西(我正在使用它来解析JSON并添加自定义元素)。我试过“data.getAsJsonArray(”array“)。remove(0);”但它删除了我的数组中的所有内容。
答案 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"}}]}