当前位置: 首页 > 知识库问答 >
问题:

如何在Java中修改现有jsonobject

鄢选
2023-03-14

我有一个来自javax的现有jsonobject。json。JsonObject类。

我一辈子都想不出如何修改其中现有的价值观。理想情况下,我想这样做:

if(object.getString("ObjectUUID").length()==0){
    object.put("ObjectUUID", UUID.randomUUID().toString());
}

根据API,不允许修改该映射。

http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html

此映射对象提供对JSON对象数据的只读访问,并尝试修改映射,无论是直接修改还是通过其集合视图修改,都会导致不支持的操作异常。

目前,我正在快速解决这个问题,但肯定有比这更好的解决方案:

if(object.getString("ObjectUUID").length()==0){
    JsonObjectBuilder job = Json.createObjectBuilder();
    job.add("ObjectUUID", UUID.randomUUID().toString());
    for(String key : object.keySet()){
        if(!key.equals("ObjectUUID")){
            job.add(key, object.get(key));
        }
    }
    object = job.build();
}

那么问题是如何修改现有的jsonject?

共有3个答案

杜志
2023-03-14

GSON指南;

obj.addProperty("Id", "001");

System.out.println("Before: " + obj.get("Id")); // 001

obj.addProperty("Id", "002");

System.out.println("After: " + obj.get("Id")); // 002
邵宜年
2023-03-14

我认为没有其他方法可以修改javax。json。JsonObject。

您应该考虑使用jackson数据绑定。

於乐
2023-03-14

如果不知道JSON对象的结构,就很难提供解决您的特定问题的答案。JsonObject实例是不可变的,因此不能像Jackson的ObjectNode那样进行更新。您可能已经发现,JsonObject。add()方法基本上是无用的,根据实现的不同,可能会产生一个不支持操作的异常。令人费解的是,它为什么首先存在。

修改对象的方法是创建一个包装原始JsonObjectBuilder实例。如果对象实例是您的原始JsonObject,您可能需要执行以下操作:

if(object.getString("ObjectUUID").length()==0){
    object job = Json.createObjectBuilder(object)
                     .add("ObjectUUID", UUID.randomUUID().toString())
                     .build();
}

这花了我一段时间来理解自己,如果你有嵌套对象等,它会变得更加冗长。如果你正在更新或替换一个对象或数组,你不需要在添加之前明确删除它。这种方法有优点也有缺点,但它比每月更新杰克逊的仪式要好:)

 类似资料:
  • 问题内容: 我需要在Java中更改JSON属性的值,我可以正确获取该值,但无法修改JSON。 这是下面的代码 做这个的最好方式是什么? 问题答案: 是不可变的,旨在进行解析操作。但是,可以将其转换为允许突变的(和): 对于数组,可以使用:

  • 我在docker中创建了一个图像。安装了Ubuntu、JDK和其他几个库。然后我退出了容器并进行了这样的提交 我又启动了容器 这次我安装了gradle和其他几个库。然后退出容器,再次提交。 每次我执行提交操作时,都会创建一个新图像,并保留带有存储库和标记的旧图像。按照这个工作流程,我很快就会用完空间。这是使用docker的正确方法吗?如何确保所有这些图像都消失。 我正在windows 10上使用d

  • 求你了,我需要你的帮助。每当我试图运行下面的程序时,它会说不兼容的类型,字符串不能转换为整数。

  • 我想在请求正文到达Http Servlet并获得processed.The请求正文的JSON有效负载如下所示,我想摆脱“PayamtChqmanViewObject”(详细信息)部分。 我可以使用以下方法获得请求正文,但我不知道如何删除JSON的详细部分并将处理后的请求正文传递给HTTP Servlet。 非常感谢您的帮助!

  • 问题内容: 在Java Servlet中,如何更改现有Cookie的值?有一个addCookie方法,但是HttpServletResponse中没有deleteCookie或editCookie 问题答案: 那些确实不存在。只需自己创建实用工具方法即可。特别是获得所需的cookie会很肿。例如 要编辑Cookie,请设置其值,然后将其添加到响应中: 如果有必要,请设置最大值,路径和域(如果它们与

  • 问题内容: 我正在尝试将我的项目目录添加到GOPATH,在Linux中,我可以这样做 在〜/ .bashrc中 Powershell中的等效性是什么 问题答案: 这应该遵循您使用Powershell设置任何Environment变量的方式(如本文所述): 如果您希望它永久存在(即将来将适用于任何外壳程序): 需要注意的一件事:当我们用来创建新的用户或计算机级环境变量时,在Windows Power