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:
JsonNode
es 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.ObjectNode
Al 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
put
reemplazo efectivo de todo el nodo, independientemente del tipo de nodo original.Si necesita "modificar" el nodo utilizando el valor existente del nodo:
get
el valor / matriz delJsonNode
put
a los padres.Código, donde el objetivo es modificar
subfield
, que es el nodo hijo deNodeA
yNode1
: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
put
método. Me gusta estoObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
fuente
Necesita obtener el
ObjectNode
tipo 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