Java에서 JsonNode를 수정하는 방법은 무엇입니까?
Java에서 JSON 속성 값을 변경해야합니다. JSON을 멋지게 만들 수 있습니다.
다음은 아래 코드입니다.
JsonNode blablas = mapper.readTree(parser).get("blablas");
for (JsonNode jsonNode : blablas) {
String elementId = jsonNode.get("element").asText();
String value = jsonNode.get("value").asText();
if (StringUtils.equalsIgnoreCase(elementId, "blabla")) {
if(value != null && value.equals("YES")){
// I need to change the node to NO then save it into the JSON
}
}
}
이를 수행하는 가장 좋은 방법은 무엇입니까?
JsonNode
변경 불가능하며 구문 분석 작업을위한 것입니다. 그러나 변형을 허용하는 ObjectNode
(및 ArrayNode
) 로 캐스팅 할 수 있습니다 .
((ObjectNode)jsonNode).put("value", "NO");
배열의 경우 다음을 사용할 수 있습니다.
((ObjectNode)jsonNode).putArray("arrayName").add(object.getValue());
@ Sharon-Ben-Asher 대답은 괜찮습니다.
하지만 제 경우에는 배열을 배열합니다.
((ArrayNode) jsonNode).add("value");
ObjectNode로 캐스팅하고 put
메서드를 사용할 수 있습니다. 이렇게
ObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
당신은 얻을 필요가 ObjectNode
설정 값에 순서대로 입력 개체를. 이것 좀 봐
다른 사람들이 수락 한 답변의 주석에서 답변을 추가하면 ObjectNode (내가 포함)로 캐스팅 할 때 예외가 발생합니다.
Exception in thread "main" java.lang.ClassCastException:
com.fasterxml.jackson.databind.node.TextNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
해결은 '상위'노드를 가져옵니다 put
원래 노드 유형에 노드를 전체 노드를 대체하는 수행하는 입니다.
노드의 기존 값을 사용하여 노드를 "수정"해야하는 경우 :
get
가치 / 배열JsonNode
- 해당 값 / 배열에 대한 수정을 수행하십시오.
- 계속
put
해서 부모 에게 전화 하십시오.
및 subfield
의 하위 노드 인 을 수정하는 것이 목표 인 코드 :NodeA
Node1
JsonNode nodeParent = someNode.get("NodeA")
.get("Node1");
// Manually modify value of 'subfield', can only be done using the parent.
((ObjectNode) nodeParent).put('subfield', "my-new-value-here");
신용 :
wassgreen @ 덕분에 ... 여기서 영감을 얻었습니다.
전체 그림을 명확하게 이해하지 못해 다른 사람들을 이해하기 위해 다음 코드가 필드를 다음 업데이트하는 데 있습니다.
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(JsonString);
JsonPointer valueNodePointer = JsonPointer.compile("/GrandObj/Obj/field");
JsonPointer containerPointer = valueNodePointer.head();
JsonNode parentJsonNode = rootNode.at(containerPointer);
if (!parentJsonNode.isMissingNode() && parentJsonNode.isObject()) {
ObjectNode parentObjectNode = (ObjectNode) parentJsonNode;
//following will give you just the field name.
//e.g. if pointer is /grandObject/Object/field
//JsonPoint.last() will give you /field
//remember to take out the / character
String fieldName = valueNodePointer.last().toString();
fieldName = fieldName.replace(Character.toString(JsonPointer.SEPARATOR), StringUtils.EMPTY);
JsonNode fieldValueNode = parentObjectNode.get(fieldName);
if(fieldValueNode != null) {
parentObjectNode.put(fieldName, "NewValue");
}
}
참고 URL : https://stackoverflow.com/questions/30997362/how-to-modify-jsonnode-in-java
'IT' 카테고리의 다른 글
jQuery 플러그인 구문을 이해하고 싶습니다. (0) | 2020.09.07 |
---|---|
Jekyll 날짜 형식은 어떻게 작동 작동합니까? (0) | 2020.09.07 |
jQuery ajax (jsonp)는 시간 초과를 무시하고 오류 이벤트를 발생시킬 수 있습니다. (0) | 2020.09.07 |
이미 생성 된 virtualenv에서 pythonpath를 어떻게 설정합니까? (0) | 2020.09.07 |
헤더 파일이 포함 된 위치를 확인하는 방법은 무엇입니까? (0) | 2020.09.07 |