我有像下面这样的 JsonObject
{"status":"ACTIVE","accounts":{"email":"[email protected] /cdn-cgi/l/email-protection","name":"Test"}}
如何使用类似的方法从 JsonObject 中删除 Json 键“email”及其值jsonObj.remove("email")
in java
如果我需要删除状态键,Json Object.remove 对我有用jsonObj.remove("status")
Update
还有一些背景,
这主要是为了测试休息终点。在我的测试中,我使用 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") 。
如果 Gson 就像杰克逊(我想是这样),你必须首先得到JsonObject
从根对象中删除“accounts”,然后删除成员“email”,例如像这样:
jsonObj.getAsJsonObject("accounts").remove("email");
或者 - 可能是首选方法 - 您可以将 json 对象映射到 POJO(具有“status”、“accounts”和“accounts”字段的 POJO 将指向另一个 POJO),导航到accounts-POJO 并设置“电子邮件”在那里为空。然后,将根 POJO 重新格式化为 JSON 并应用忽略具有空值的字段的设置。
Edit(回答评论中的问题):
简而言之,我不知道是否有内置功能,但应该是可行的。
问题是,如果你只提供像这样的密钥email
等等,您可能会遇到有多个键的情况,因此识别正确的键可能很困难。因此,最好将密钥提供为accounts.email
将“键”拆分为子表达式,然后使用各个部分遍历 Json 树,或者将 Json 转换为 POJO 并使用某种表达式语言(例如 Java EL 或 OGNL)来遍历 POJO。
如果您想删除所有名为email
您可以遍历整个 json 树,检查是否存在具有该名称的属性,如果有则将其删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)