У вас была небольшая проблема с вашим кодом.Когда вы добавляете новую текстовую запись, вы должны указать значение ключа, с которым хотите связать новый текстовый узел.Итак, эта строка:
nodeObj.set(newNode);
Просто нужно быть таким:
nodeObj.set("B", newNode);
Вот полный пример, который делает то, что вы показываете в своем вопросе, включая код, который вы предоставили, простоэто небольшое исправление:
public static void main(String... args) throws IOException {
// Read in the structure provided from a text file
FileReader f = new FileReader("/tmp/foox.json");
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(f);
// Print the starting structure
System.out.println(rootNode);
// Get the node we want to operate on
ObjectNode jsonNode = (ObjectNode)rootNode.get(0).get("A");
// The OPs code, with just the small change of adding the key value when adding the new String
JsonNode newNode = new TextNode("My String Message");
ObjectNode nodeObj = (ObjectNode) jsonNode;
nodeObj.removeAll();
nodeObj.set("B", newNode);
// Print the resulting structure
System.out.println(rootNode);
}
И полученный результат:
[{"A":{"B":{"C":"Message","D":"FN1"}}}]
[{"A":{"B":"My String Message"}}]
ОБНОВЛЕНИЕ: согласно обсуждению в комментариях, чтобы внести изменения, которые вы иллюстрируете, вы должны иметь доступ кObjectNode, связанный с ключом A. Именно этот ObjectNode связывает B с ObjectNode, содержащим C и D. Так как вы хотите изменить значение, с которым связан B (вы хотите, чтобы оно было связано с TextNode вместо ObjectNode)вам нужен доступ к ObjectNode, связанному с A. Если у вас есть только указатель на ObjectNode, содержащий C и D, вы не можете внести изменение, которое хотите внести.