一尘不染

从JsonObject内的Json删除密钥

json

我有如下的JsonObject

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

如何通过使用jsonObj.remove("email")Java中的方法从JsonObject中删除Json密钥“电子邮件”及其值

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 Object上的JsonObj.remove(“ key”)。


阅读 331

收藏
2020-07-27

共1个答案

一尘不染

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

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,则可以遍历整个json树,请检查是否存在具有该名称的属性,如果是,则将其删除。

2020-07-27