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

如何重写完整更新的json而不仅仅是嵌套部分

方献
2023-03-14

我有一个名为test.json的json文件,看起来像这样:

{
  "Added": {
    "type": "K",
    "newmem": {
      "IDNew": {
        "id": "777709",
        "type": "LOP"
      },
      "birthDate": "2000-12-09"
    },
    "code": "",
    "newest": {
      "curlNew": "",
      "addedForNew": ""
    }
  }
}

我可以使用以下代码更新json中的id并写回文件:

FileReader reader = new FileReader(filePath); //where file path = D://.../test.json
String keyToUpdate = "Added.newmem.IDNew.id"
String[] keyArr = jsonKey.split("\\." );
String keyToUpdate = keyArr [keyArr.length-1]
keyArr.removeElement(keyArr, keyToUpdate)
for (String key: keyArr){ 
   jsonObject = (JSONObject) jsonObject.get(key);
}

jsonObject.put("id",12345);
FileOutputStream outputStream = new FileOutputStream(filePath);
byte[] strToBytes = jsonObject.toString().getBytes();
outputStream.write(strToBytes);

但是,它不是使用更新的值重写整个 json,而是只写入:

  {
    "id": "777709",
    "type": "LOP"
  }

我可以做什么来重写整个json,而不是只重写它的嵌套部分?

共有1个答案

孟昊空
2023-03-14

更新前的jsonObject只包含“IDNew”节点。

最好的方法是使用Jayway的xPath

private static final Configuration configuration = Configuration.builder()
    .jsonProvider(new JacksonJsonNodeJsonProvider())
    .mappingProvider(new JacksonMappingProvider())
    .build();



    String originalJson = "{\r\n"
            + "  \"Added\": {\r\n"
            + "    \"type\": \"K\",\r\n"
            + "    \"newmem\": {\r\n"
            + "      \"IDNew\": {\r\n"
            + "        \"id\": \"777709\",\r\n"
            + "        \"type\": \"LOP\"\r\n"
            + "      },\r\n"
            + "      \"birthDate\": \"2000-12-09\"\r\n"
            + "    },\r\n"
            + "    \"code\": \"\",\r\n"
            + "    \"newest\": {\r\n"
            + "      \"curlNew\": \"\",\r\n"
            + "      \"addedForNew\": \"\"\r\n"
            + "    }\r\n"
            + "  }\r\n"
            + "}";

JsonNode updatedJson = JsonPath.using(configuration).parse(originalJson).set("$.Added.IDNew.id", 12345).json();

System.out.println(updatedJson.toString());
}
 类似资料:
  • 问题内容: 我正在使用以下代码使用Python保存网页: 问题 :此代码将html保存为基本html,而不包含javascript,图像等。我想将网页保存为完整(就像我们在浏览器中有选择) 更新 :我现在正在使用以下代码保存webapge的所有js / images / css文件,以便可以将其保存为完整的网页,但是仍然像基本html一样保存了我的输出html: 问题答案: 尝试使用seleniu

  • 我真的需要帮助。 我试图在新机器上运行我的jsp应用程序,jetty给了我这个错误:org.apache.jasper.JasperException:pwc6345:调用javac时有一个错误。需要完整的JDK(而不仅仅是JRE 编辑:问题解决-这是月食月星错误-在月食开普勒,它正在工作

  • 问题内容: 我知道这很长,但是我需要在主要问题之前提供一些背景信息。我正在创建一个页面,该页面将分为两列。这是ui路由器代码: 基本上,用户将过渡到状态,该状态具有如下所示的模板: 将为用户显示两列。左列仅具有一个输入字段和按钮,按下该按钮会将用户转换到状态。 当我们转换到状态时,其控制器将调用,这将在右列中设置其嵌套视图。该状态将首先以随机顺序解析数字数组,然后将其作为参数传入控制器。所述然后部

  • 我将根据提供的键更新mongoose文档的一些字段。例如,当我们在JSON中呈现mongoose文档时。 和更新参数,如下所示。 当我这样运行mongoose api时。 它替换了整个地址对象,最终结果是 它只是替换地址字段,但我想只更新城市字段。这是理想的结果。 谢谢

  • 具有类型的HashMap 希望更新主地图内地图的所有键值对。是一个方法,它在添加值后返回。 我如何在上面的代码中也更新?将值增加1

  • 我想更改按钮的背景色和前景色。我使用了setBackground、setForeground和SetObque(true),它适用于前景,但不适用于按钮的背景。按钮周围有点像黑色边框,但我希望按钮本身是黑色的。我该怎么修?

  • 我有这样一个html元素: 我想按文本行找到一个表格,然后单击垃圾桶图标将其删除。 所以我的想法是循环行<代码> 我的理解是,驱动程序是整个页面 从第一行而不是第二行选择删除按钮。 我也试过了 但它也选择行。 只是为了确保我打印出了if条件下的行(,它打印出了第二行。 知道发生了什么或者我如何选择第二行中的吗?

  • 问题内容: 我正在尝试使用Java在数据库中设置时间戳,但是在我的表中,我得到的只是日期,而没有时间(例如,看起来像“ 2010-09-09 00:00:00”)。 我使用我的mysql数据库中的日期时间字段(因为它似乎是日期时间是比较常见的比时间戳)。我设置日期的代码如下所示: 如何设置日期以包括时间? 编辑: 我按照下面的方法更改了代码,它同时设置了日期和时间。 问题答案: 使用和。仅限日期,