Ich muss den Wert eines JSON-Attributs in Java ändern. Ich kann den Wert korrekt abrufen, aber ich konnte den JSON nicht ändern.
Hier ist der Code unten
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
}
}
}
Was ist der beste Weg, dies zu tun?
resultMap = mapper.convertValue(aJsonNode, Map.class);
in der Map ändern und diese Map dann wieder in einen JsonNode ändern. Nur sagen.Antworten:
JsonNode
ist unveränderlich und für den Analysevorgang vorgesehen. Es kann jedoch inObjectNode
(undArrayNode
) gegossen werden , die Mutationen zulassen:Für ein Array können Sie Folgendes verwenden:
quelle
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Hinzufügen einer Antwort, da einige andere in den Kommentaren der akzeptierten Antwort positiv bewertet haben, erhalten sie diese Ausnahme, wenn sie versuchen, in ObjectNode umzuwandeln (ich selbst eingeschlossen):
Die Lösung besteht darin, den übergeordneten Knoten
put
abzurufen und den gesamten Knoten unabhängig vom ursprünglichen Knotentyp effektiv zu ersetzen.Wenn Sie den Knoten unter Verwendung des vorhandenen Werts des Knotens "ändern" müssen:
get
der Wert / Array derJsonNode
put
den Elternteil an.Code, dessen Ziel das Ändern ist
subfield
, der der untergeordnete Knoten vonNodeA
und istNode1
:Credits:
Ich habe diese Inspiration von hier bekommen , dank wassgreen @
quelle
Die Antwort von @ Sharon-Ben-Asher ist in Ordnung.
Aber in meinem Fall muss ich für ein Array Folgendes verwenden:
quelle
Ich denke, Sie können einfach in ObjectNode umwandeln und die
put
Methode verwenden. So wasObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
quelle
Sie müssen Typobjekt
ObjectNode
abrufen, um Werte festzulegen. Schauen Sie sich auf diesequelle
Nur um andere zu verstehen, die möglicherweise nicht das ganze Bild klarstellen, funktioniert der folgende Code für mich, um ein Feld zu finden und es dann zu aktualisieren
quelle