Как заменить узел josn в jsonNode или ObjectNode - PullRequest
0 голосов
/ 30 января 2020

У меня JSON узелоподобный сильфон. Структура JsonNode изменится динамически .

Теперь я хочу replace/update значение определенного ключа.

Образец JOSN One

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

Образец JOSN Two

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

Я хочу заменить значение почтового индекса 021566 на 566258. Я знаю имя ключа (почтовый индекс), старое и новое значение почтового индекса, но я не знаю путь почтового индекса. Я пробовал несколько способов, используя com.fasterxml.jackson.databind.JsonNode - put, replace

Есть ли способ обновить в java?

1 Ответ

0 голосов
/ 30 января 2020

JsonNodes являются неизменяемыми, но вы можете найти нужное значение из 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, чем взять весь потомок в качестве узла, заменить его одно значение и затем заменить узел. Это должно работать для вас в крайнем случае, хотя:)

...