gpt4 book ai didi

java - 从 JsonObject 中的 Json 中删除键

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:28 25 4
gpt4 key购买 nike

我有如下所示的 JsonObject

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

如何在 java 中使用类似 jsonObj.remove("email") 的方法从 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);
}}

如果我需要删除我使用的必填字段,请在由上述函数创建的 Json 对象上使用 JsonObj.remove("key")。

最佳答案

如果 Gson 像 Jackson(我假设是这样),您必须首先从根对象中获取 JsonObject“accounts”,然后删除成员“email”,例如像这样:

jsonObj.getAsJsonObject("accounts").remove("email");

或者 - 并且可能是首选方式 - 您可以将 json 对象映射到 POJO(具有字段“status”、“accounts”和“accounts”的对象将指向另一个 POJO),导航到 accounts-POJO并在那里将“电子邮件”设置为空。然后,您将根 POJO 重新格式化为 JSON 并应用忽略具有空值的字段的设置。

编辑(回答评论中的问题):

简而言之,我不知道是否有内置功能,但它应该是可行的。

问题是,如果您只提供 email 等键,您可能会遇到有多个键的情况,因此很难识别正确的键。因此,最好将 key 提供为 accounts.email 并将“ key ”拆分为子表达式,然后使用这些部分遍历 Json 树或将 Json 转换为 POJO 并使用一些表达式语言(例如 Java EL 或 OGNL)来遍历 POJO。

如果您想删除所有名为 email 的属性,您可以遍历整个 json 树,检查是否存在具有该名称的属性,如果有则将其删除。

关于java - 从 JsonObject 中的 Json 中删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com