当前位置: 首页 > 面试题库 >

从JsonObject内的Json删除密钥

袁河
2023-03-14
问题内容

我有如下的JsonObject

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

如何通过使用jsonObj.remove("email")Java中的方法从JsonObject中删除Json密钥“电子邮件”及其值

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 Object上的JsonObj.remove(“ key”)。


问题答案:

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

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

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

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

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

问题是,如果仅提供诸如此类的密钥,则email可能会遇到多个密钥的情况,因此很难确定正确的密钥。因此,最好提供键as
accounts.email并将“键”拆分为子表达式,然后使用这些部分遍历Json树或将Json转换为POJO并使用某种表达语言(例如Java
EL或OGNL)进行遍历POJO。

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



 类似资料:
  • 问题内容: 我正在开发一个Android项目,该项目需要JSONObject作为POST请求的主体。放置JSON的键和值后,我得到了以下代码行: 但是服务器得到以下信息: 我已经尝试过JSONStringer,但是它的帮助并不大,因为的请求是。 更新 我不尝试构造JSONObject,因为已经通过使用以下代码行(由@osayilgan给出的代码)完成了此操作: 这不是问题。下述接口用于与服务器通信

  • 一些更多的背景,这主要是为了测试一个restendpoint。在我的测试中,我使用Builder模式创建了与有效负载匹配的java对象,然后使用GsonBuilder隐藏到Json中,如 如果我需要删除我所使用的一个必需字段,请在上面的函数创建的Json对象上删除jsonobj.remove(“key”)。

  • 服务器收到了以第二个JSON为主体的请求,这是令人失望的。我注意到键被自动添加到对象中。 有没有人知道我该怎么解决这个问题?

  • 问题内容: 我正在使用net.sf.json.JSONObject创建一些要发送到前端应用程序的数据,并且正在与之交互的代码不喜欢其在每个字段名称中添加引号的方式。 例如: 产生字符串{“ JSON”:“ Hello,World”}。 我希望它返回的是{JSON:“ Hello,World”}-在“ JSON”周围没有引号。我该怎么做才能做到这一点? 问题答案: 在javadoc中说: toStr

  • 我有一个密钥库,名为keystore。jks和意外添加了两个键。我必须使用键2制作一个签名的apk。因为我已经使用key2上传了一个apk,我想从keystore中删除Key1。jks。 签名的apk是使用Key1生成的,但我需要使用key2生成。 请帮帮我。提前谢谢。

  • 关于如何在Java代码中管理密码,有各种各样的问题和答案——例如,这里和这里。 讨论往往集中在使用< code>char[]而不是< code>String的优点上。 但是,如果是第三方库将密码存储在字符串中,有什么方法可以避免密码存储在JVM的堆中呢? 例如,在以下三种情况下,我认为密码将在JVM的生命周期内保留在堆中: 编辑-示例更新为与我的问题更相关: 在上面的示例中,我的对象在中包含密码。