java - 从 JsonObject 中的 Json 中删除键

标签 java json

我有如下所示的 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/

相关文章:

json - Grails 将请求作为 JSON 发送并在 Controller 中解析它

json - 如何使用Groovy将JSON数据元素解析为域对象

java - 每个原始数据类型的 JSON 到 Map<String> 转换

ios - 解析 JSON 响应时 : fatal error: array cannot be bridged from Objective-C

Java Set 集合 - 覆盖 equals 方法

java - 序列化/反序列化 SIPDIalog

java - JMS 消息。模型包含数据或数据指针?

java - 旋转图像时背景为黑色

Javamail,获取邮件正文

python - 将 XML 转换为特定格式的嵌套 JSON 对象