Necesito cambiar el valor de un atributo JSON en Java, puedo obtener el valor correctamente pero no pude modificar el JSON.
aquí está el código a continuación
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
}
}
}
¿Cuál es la mejor manera de hacer esto?

resultMap = mapper.convertValue(aJsonNode, Map.class);modificarlo en el mapa y luego cambiar ese mapa de nuevo a un JsonNode. Solo digo.Respuestas:
JsonNodees inmutable y está diseñado para la operación de análisis. Sin embargo, se puede convertir enObjectNode(yArrayNode) que permitan mutaciones:Para una matriz, puede usar:
fuente
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNodeAl agregar una respuesta, ya que algunos otros han votado a favor en los comentarios de la respuesta aceptada, obtienen esta excepción al intentar transmitir a ObjectNode (incluido yo mismo):
La solución es obtener el nodo 'principal' y realizar un
putreemplazo efectivo de todo el nodo, independientemente del tipo de nodo original.Si necesita "modificar" el nodo utilizando el valor existente del nodo:
getel valor / matriz delJsonNodeputa los padres.Código, donde el objetivo es modificar
subfield, que es el nodo hijo deNodeAyNode1:Créditos:
Obtuve esta inspiración de aquí , gracias a wassgreen @
fuente
La respuesta de @ Sharon-Ben-Asher está bien.
Pero en mi caso, para una matriz tengo que usar:
fuente
Creo que puedes simplemente convertir a ObjectNode y usar el
putmétodo. Me gusta estoObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");fuente
Necesita obtener el
ObjectNodetipo de objeto para establecer valores. Echa un vistazo a estofuente
Solo por el bien de la comprensión de otros que pueden no tener la imagen completa clara, el siguiente código me funciona para encontrar un campo y luego actualizarlo
fuente