从 JsonObject 中的 Json 中删除键

新手上路,请多包涵

我有如下所示的 JsonObject

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

如何通过在 java 中使用类似 jsonObj.remove("email") 的东西从 JsonObject 中删除 Json 键“email”及其值

如果我需要删除状态键,JsonObj.removev 为我工作 jsonObj.remove("status")

更新

一些更多的背景,这主要是为了测试一个休息端点。在我的测试中,我使用 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”)。

原文由 Anoop Philip 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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

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

或者 - 并且可能是首选方式 - 您可以将 json 对象映射到一个 POJO(具有“状态”、“帐户”和“帐户”字段的对象将指向另一个 POJO),导航到 accounts-POJO 并设置“电子邮件”到那里为空。然后,您将根 POJO 重新格式化为 JSON,并应用忽略具有空值的字段的设置。

编辑(回答评论中的问题):

简而言之,我不知道是否有内置功能,但它应该是可行的。

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

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

原文由 Thomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者,您可以使用以下内容:

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

其中 jsonjsonPath 是字符串。

库: com.jayway.jsonpath.DocumentContext

原文由 nvntkmr 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏