Ich muss den Wert eines JSON-Attributs in Java ändern. Ich kann den Wert richtig 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?
JsonNode
ist unveränderlich und für die Analyse bestimmt. Es kann jedoch in ObjectNode
(und ArrayNode
) umgewandelt werden, die Mutationen zulassen:
((ObjectNode)jsonNode).put("value", "NO");
Für ein Array können Sie Folgendes verwenden:
((ObjectNode)jsonNode).putArray("arrayName").add(object.getValue());
Ich denke, Sie können einfach zu ObjectNode wechseln und die put
-Methode verwenden. So was
ObjectNode o = (ObjectNode) jsonNode;
o.put("value", "NO");
Sie müssen ein ObjectNode
-Objekt abrufen, um die Werte festzulegen .. _. Schauen Sie sich this an.
Hinzufügen einer Antwort, wie sie einige andere in den Kommentaren der akzeptierten Antwort hochgestuft haben. Sie erhalten diese Ausnahme, wenn sie versuchen, sie in ObjectNode umzuwandeln (ich selbst eingeschlossen):
Exception in thread "main" Java.lang.ClassCastException:
com.fasterxml.jackson.databind.node.TextNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Die Lösung besteht darin, den übergeordneten Knoten abzurufen und eine put
auszuführen, die den gesamten Knoten unabhängig vom ursprünglichen Knotentyp ersetzt.
Wenn Sie den Knoten mit dem vorhandenen Wert des Knotens "modifizieren" müssen:
get
der Wert/das Array der JsonNode
put
für das übergeordnete Element auf.Code, in dem das Ziel darin besteht, subfield
zu ändern. Dabei handelt es sich um den untergeordneten Knoten von NodeA
und 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");
Credits:
Ich habe diese Inspiration von hier , dank wassgreen @
Die Antwort von @ Sharon-Ben-Asher ist in Ordnung.
Aber in meinem Fall muss ich für ein Array Folgendes verwenden:
((ArrayNode) jsonNode).add("value");