从JsonObject中的Json中删除键

时间:2015-12-04 15:59:26

标签: java json

我有像下面的JsonObject

{"status":"ACTIVE","accounts":{"email":"email@gmail.com","name":"Test"}}

如何使用java中的jsonObj.remove("email")之类的东西从JsonObject中删除Json密钥“email”及其值

如果我需要删除状态密钥jsonObj.remove("status")

,JsonObj.removev为我工作

更新

更多背景, 这主要用于测试休息终点。在我的测试中,我使用Builder模式创建了与有效负载匹配的java对象,然后使用GsonBuilder转换为Json,如

import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
public class JsonConvertor() {
public static JsonObject convertToJsonObject(Object payload) {
GsonBuilder builder = new GsonBuilder();
return (JsonObject) builder.setFieldNamingPolicy(FieldNamingPolicy.Policy).
            create().toJsonTree(payload);
}}

如果我需要删除我在上面的函数创建的Json对象上使用的JsonObj.remove(“key”)所需的字段。

2 个答案:

答案 0 :(得分:22)

如果Gson像Jackson一样(我假设是这样),你必须先从根对象中获取JsonObject“帐户”,然后删除成员“email”,例如像这样:

jsonObj.getAsJsonObject("accounts").remove("email");

或者 - 可能是首选方式 - 您将json对象映射到POJO(具有“status”,“accounts”和“accounts”将指向另一个POJO的字段),导航到帐户-POJO并将“email”设置为null。然后,将根POJO重新格式化为JSON,并应用省略具有空值的字段的设置。

修改(回答评论中的问题):

为了缩短它,我不知道是否有内置功能,但它应该是可行的。

问题在于,如果您只提供email等密钥,您可能会遇到有多个密钥的情况,因此识别正确的密钥可能很难。因此,最好将密钥提供为accounts.email并将“密钥”拆分为子表达式,然后使用部件遍历Json树或将Json转换为POJO并使用某种表达式语言(例如Java EL)或OGNL)遍历POJO。

如果要删除名为email的所有属性,只需遍历整个json树,检查是否存在具有该名称的属性,如果是,则将其删除。

答案 1 :(得分:0)

或者,您可以在下面使用:

DocumentContext doc = JsonPath.parse(json);
doc.delete(jsonPath);

jsonjsonPath是字符串。

库:com.jayway.jsonpath.DocumentContext