我有如下的JsonObject
{"status":"ACTIVE","accounts":{"email":"email@gmail.com","name":"Test"}}
如何通过使用jsonObj.remove("email")Java中的方法从JsonObject中删除Json密钥“电子邮件”及其值
jsonObj.remove("email")
JsonObj.removev为我工作,如果我需要删除状态键 jsonObj.remove("status")
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 Object上的JsonObj.remove(“ key”)。
如果Gson像Jackson一样(我认为是这样),则必须首先JsonObject从根对象中获取“帐户”,然后删除成员“ email”,例如:
JsonObject
jsonObj.getAsJsonObject("accounts").remove("email");
或者,也可能是首选的方式,您可以将json对象映射到POJO(具有字段“ status”,“ accounts”和“ accounts”的字段将指向另一个POJO),导航到accounts- POJO并设置“电子邮件”在那里无效。然后,将根POJO重新格式化为JSON,并应用设置以忽略具有空值的字段。
编辑 (评论中问题的答案):
简而言之,我不知道是否有内置功能,但是应该可行。
问题是,如果仅提供诸如此类的密钥,则email可能会遇到多个密钥的情况,因此很难确定正确的密钥。因此,最好提供键as accounts.email并将“键”拆分为子表达式,然后使用这些部分遍历Json树或将Json转换为POJO并使用某种表达语言(例如Java EL或OGNL)进行遍历POJO。
email
accounts.email
如果要删除所有命名的属性email,则可以遍历整个json树,请检查是否存在具有该名称的属性,如果是,则将其删除。