2016-12-28 4 views
3

JsonPath 및 이에 상응하는 XML Xpath가 알려진 JSON (알 수없는 구조)을 수정하려고합니다.Java에서 알 수없는 JSON의 JsonNode를 동적으로 수정하십시오.

나는 동일한 것을 위해 com.jayway.jsonpath.JsonPath 라이브러리를 사용하여 지쳤다. JsonPath의 문제점은 값을 반환하지만 대상 노드를 수정할 수 없다는 것입니다.

다음과 같은

JsonPath.read(jsonFile, jsonPath); 
JsonPath.parse(jsonPath); 
System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath)); 

내가 previously asked quetion에 언급 된 잭슨을 사용하여 시도 내 코드입니다, 그러나 그것은 내가 할 수없는

((ObjectNode) parent).put(fieldName, newValue); 

을 다음과 같이 노드에서 노드를 통과해야 알려지지 않은 구조 때문입니다.

나는 질문 recursively parse JSON object에게 주어진 대답을 시도했지만 그것을 수정하지 구문 분석하는 방법을 말한다

나는이 달성 할 수있는 방법은 없나요

JsonNode root = mapper.readTree("Json in form of String"); 
((JsonNode)(root.get("JsonPath")).set("New Value"); 

다음 할 필요가

?

답변

3

JsonNode 개체는 수정할 수 없으므로 변경할 수 없습니다. 할 수있는 일은 JsonNode을 다른 것으로 대체하는 것입니다. 필요한 방법을 폭로하기 위해서는 ObjectNode에 대한 캐스트가 필요합니다.

JsonNode node = root.findParent("JsonPath"); 

그런 다음 새 것으로 교체하려면 다음 두 방법 중 하나를 사용하십시오 :

((ObjectNode) node).remove("JsonPath");   // remove current node 
((ObjectNode) node).put("JsonPath", "New Value"); // add new one with new value 

또는

((ObjectNode) node).replace("JsonPath", new TextNode("New Value")); 
먼저 교체하려는 노드의 부모를 찾아