Ответ 1
Короткий ответ: вы не можете. TextNode
не предоставляет никаких операций, которые позволяют вам изменять содержимое.
С учетом сказанного вы можете легко пересечь узлы в цикле или через рекурсию, чтобы получить желаемое поведение. Представьте себе следующее:
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);
}
}
Вывод:
{ "fieldName": "new value", "nested": { "fieldName": "new value" }}