从 JsonObject 内的 Json 中删除密钥

2024-01-02

我有像下面这样的 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(使用前将#替换为@)

从 JsonObject 内的 Json 中删除密钥 的相关文章

随机推荐