Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JsonObject内的Json中移除键_Java_Json - Fatal编程技术网

Java 从JsonObject内的Json中移除键

Java 从JsonObject内的Json中移除键,java,json,Java,Json,我有一个JsonObject,如下所示 {"status":"ACTIVE","accounts":{"email":"email@gmail.com","name":"Test"}} 如何在java中使用类似于jsonObj.remove(“email”)的东西从JsonObject中删除Json键“email”及其值 如果我需要删除状态键,JsonObj.removev将为我工作JsonObj.remove(“状态”) 更新 还有一些背景, 这主要用于测试静止端点。在我的测试中,我使用生成

我有一个JsonObject,如下所示

{"status":"ACTIVE","accounts":{"email":"email@gmail.com","name":"Test"}}
如何在java中使用类似于
jsonObj.remove(“email”)的东西从JsonObject中删除Json键“email”及其值

如果我需要删除状态键,JsonObj.removev将为我工作
JsonObj.remove(“状态”)

更新

还有一些背景, 这主要用于测试静止端点。在我的测试中,我使用生成器模式创建了与有效负载匹配的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并将“email”设置为null。然后将根POJO重新格式化为JSON,并应用一个忽略具有空值的字段的设置

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

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

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


如果要删除名为
电子邮件的所有属性,您可以遍历整个json树,检查是否有具有该名称的属性,如果有,则将其删除。

或者,您可以使用以下命令:

DocumentContext doc = JsonPath.parse(json);
doc.delete(jsonPath);
其中
json
jsonPath
是字符串


库:.

帐户
本身是一个对象,因此您的
jsonObj
应该指向该对象。此外,请考虑在你的问题中增加更多的信息,因为我们不知道什么是代码> JSONOBJ 实际上是(实际类型,哪个库,它指向什么)等等。你投入的更多的努力,问题会有更多的人愿意帮助。你有一个java对象与这个JSON匹配吗?是的,我有与JSON匹配的java对象。@Thomas我在问题中添加了更多信息。
jsonObj.getAsJsonObject(“accounts”).remove(“email”)工作正常。谢谢@Thomas。另一个相关的问题是,有没有更好的方法来识别要删除的密钥是主Json对象(如“status”)中的密钥还是主Json对象的Json对象(如“email”)中的密钥@AnoopPhilip我将添加一个编辑,因为它对于注释来说太多了。