My goal is to update some textual fields in a JsonNode.
List<JsonNode> list = json.findValues("fieldName");
for(JsonNode n : list){
// n is a TextNode. I'd like to change its value.
}
I don't see how this could be done. Do you have any suggestion?
The JsonNode class is immutable. That means we cannot modify it.
Jackson is one such Java Json library used for parsing and generating Json files. It has built in Object Mapper class which parses json files and deserializes it to custom java objects. It helps in generating json from java objects.
JsonNode is Jackson's tree model (object graph model) for JSON. Jackson can read JSON into a JsonNode instance, and write a JsonNode out to JSON. This Jackson JsonNode tutorial will explain how to deserialize JSON into a JsonNode and serialize a JsonNode to JSON.
A ObjectNode provides a node for a linked list with Object data in each node.
The short answer is: you can't. TextNode
does not expose any operations that allows you to alter the contents.
With that being said, you can easily traverse the nodes in a loop or via recursion to get the desired behaviour. Imagine the following:
public class JsonTest {
public static void change(JsonNode parent, String fieldName, String newValue) {
if (parent.has(fieldName)) {
((ObjectNode) parent).put(fieldName, newValue);
}
// Now, recursively invoke this method on all properties
for (JsonNode child : parent) {
change(child, fieldName, newValue);
}
}
@Test
public static void main(String[] args) throws IOException {
String json = "{ \"fieldName\": \"Some value\", \"nested\" : { \"fieldName\" : \"Some other value\" } }";
ObjectMapper mapper = new ObjectMapper();
final JsonNode tree = mapper.readTree(json);
change(tree, "fieldName", "new value");
System.out.println(tree);
}
}
The output is:
{"fieldName":"new value","nested":{"fieldName":"new value"}}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With