0

我在JSON下面有一个类似节点。的结构JsonNode动态变化。

现在我想要replace/update一个特定键的值。

示例 JSON 一

{
  "company": "xyz",
  "employee": {
    "name": "abc",
    "address": {
      "zipcode": "021566"
    }
  }
}

示例 JSON 2

{
  "name": "abc",
  "address": {
    "zipcode": "021566"
  }
}

我想将邮政编码值替换021566566258. 我知道 key name (zipcode)、 old 和 new zip code 值,但我不知道邮政编码的路径。我尝试了多种使用方式com.fasterxml.jackson.databind.JsonNode - put, replace

有没有办法在java中更新?

4

1 回答 1

1

JsonNode 是不可变的,但您可以从 JsonNode 中找到所需的值,将原始值转换为 ObjectNode,替换该值,然后将其转换回 JsonNode。我知道这有点奇怪,但它对我有用。

  public static void findAndReplaceJsonNode throws JsonProcessingException {
    String jsonOne = "{ \"company\" : \"xyz\", \"address\" : { \"zipcode\" : \"021566\", \"state\" : \"FL\" } }";
    String jsonTwo = "{ \"company\" : \"abc\", \"address\" : { \"zipcode\" : \"566258\", \"state\" : \"FL\" } }";

    ObjectMapper mapper = new ObjectMapper();
    JsonNode nodeOne = mapper.readTree(jsonOne);
    JsonNode nodeTwo = mapper.readTree(jsonTwo);

    JsonNode findNode = nodeTwo.get("address");

    ObjectNode objNode = (ObjectNode) nodeOne;
    objNode.replace("address", findNode);
    nodeOne = (JsonNode) objNode;

    System.out.println(nodeOne);
  }

输出:

{"company":"xyz","address":{"zipcode":"566258","state":"FL"}}

免责声明:虽然我定期进行一些 JSON 解析和处理,但我当然不会说我擅长它或使用它们进行树遍历。在 JsonNode 中查找子节点的值可能比将整个子节点作为节点,替换它的一个值然后替换节点更好的方法。不过,这应该对您有用:)

于 2020-01-30T13:58:46.890 回答