当前位置:  开发笔记 > 编程语言 > 正文

从JsonObject中的Json中删除键

如何解决《从JsonObject中的Json中删除键》经验,为你挑选了1个好方法。

我有像下面的JsonObject

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

如何通过使用类似于jsonObj.remove("email")java的东西从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);
}}

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



1> Thomas..:

如果Gson像Jackson一样(我假设是这样)你必须首先JsonObject从根对象中获取"帐户",然后删除成员"email",例如:

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

或者 - 可能是首选方式 - 您将json对象映射到POJO(具有字段"status","accounts"和"accounts"将指向另一个POJO的那个),导航到accounts-POJO并设置"发送电子邮件至"null".然后,将根POJO重新格式化为JSON,并应用省略具有空值的字段的设置.

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

为了缩短它,我不知道是否有内置功能,但它应该是可行的.

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

如果要删除所有已命名的属性email,只需遍历整个json树,检查是否存在具有该名称的属性,如果是,则将其删除.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有