我有像下面的JsonObject
{"status":"ACTIVE","accounts":{"email":"email@gmail.com","name":"Test"}}
如何通过使用类似于jsonObj.remove("email")
java的东西从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); }}
如果我需要删除我使用的必需字段,JsonObj.remove("key")在由上面的函数创建的Json对象上.
如果Gson像Jackson一样(我假设是这样)你必须首先JsonObject
从根对象中获取"帐户",然后删除成员"email",例如:
jsonObj.getAsJsonObject("accounts").remove("email");
或者 - 可能是首选方式 - 您将json对象映射到POJO(具有字段"status","accounts"和"accounts"将指向另一个POJO的那个),导航到accounts-POJO并设置"发送电子邮件至"null".然后,将根POJO重新格式化为JSON,并应用省略具有空值的字段的设置.
编辑(回答评论中的问题):
为了缩短它,我不知道是否有内置功能,但它应该是可行的.
问题是,如果你只是提供类似的键email
等,你可能会遇到有多个键的情况,因此识别正确的键可能很难.因此,最好提供密钥accounts.email
并将"密钥"拆分为子表达式,然后使用部件遍历Json树或将Json转换为POJO并使用某种表达式语言(例如Java EL或OGNL)进行遍历POJO.
如果要删除所有已命名的属性email
,只需遍历整个json树,检查是否存在具有该名称的属性,如果是,则将其删除.