我有如下所示的 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 许可协议
如果 Gson 像 Jackson(我假设是这样),您必须首先从根对象中获取
JsonObject
“accounts”,然后删除成员“email”,例如:或者 - 并且可能是首选方式 - 您可以将 json 对象映射到一个 POJO(具有“状态”、“帐户”和“帐户”字段的对象将指向另一个 POJO),导航到 accounts-POJO 并设置“电子邮件”到那里为空。然后,您将根 POJO 重新格式化为 JSON,并应用忽略具有空值的字段的设置。
编辑(回答评论中的问题):
简而言之,我不知道是否有内置功能,但它应该是可行的。
问题是,如果您只提供
email
等密钥,您可能会遇到有多个密钥的情况,因此很难识别正确的密钥。因此,最好将密钥提供为accounts.email
并将“密钥”拆分为子表达式,然后使用这些部分遍历 Json 树或将 Json 转换为 POJO 并使用某种表达式语言(例如Java EL 或 OGNL) 来遍历 POJO。如果您想删除所有名为
email
的属性,您可以遍历整个 json 树,检查是否存在具有该名称的属性,如果有则将其删除。