Как преобразовать JsonNode в ObjectNode

У меня есть объект com.fasterxml JsonNode с некоторыми данными. Мне нужно сделать некоторые манипуляции с его данными. Я googled для ответа, но не получил его должным образом. Можете ли вы предложить мне, как манипулировать данными JsonNode. Я также попытался преобразовать JsonNode в ObjectNode следующим образом

ObjectNode objectNode = (ObjectNode)filterJson;

но это дает следующее исключение....

java.lang.ClassCastException: com.fasterxml.jackson.databind.node.TextNode cannot be cast to 
com.fasterxml.jackson.databind.node.ObjectNode

пожалуйста, помогите!!

Ответ 1

Наконец, я получил решение следующим образом:

JsonNode jsonNode = Json.toJson("Json String");
ObjectNode node = (ObjectNode) new ObjectMapper().readTree(jsonNode.asText());
//perform operations on node
jsonNode = (JsonNode) new ObjectMapper().readTree(node.toString());

или другой, как показано ниже...

ObjectNode node = (ObjectNode) new ObjectMapper().readTree("Json String")
//perform operations on node
jsonNode = (JsonNode) new ObjectMapper().readTree(node.toString());

но я не знаю, хороший ли это подход или нет? Если есть что-то лучше, чем указано выше, пожалуйста, дайте мне знать. Спасибо!

Ответ 2

Вы можете конвертировать JsonNode в ObjectNode простым способом:

ObjectNode objectNode = jsonNode.deepCopy();

Доступно с Jackson 2.0 и протестировано с Jackson 2.4.0

Ответ 3

У меня тоже была эта ошибка, хотя в моем случае это была глупая ошибка. Я случайно импортировал org.codehaus.jackson.node.ObjectNode вместо com.fasterxml.jackson.databind.node.ObjectNode. Использование Джексона ObjectNode исправило проблему.

Ответ 4

Я пробую это несколько раз, все будет хорошо! Вы определяете только Student Class для сопоставления свойств. Затем вы можете преобразовать объект jsonNode в Student.

Student student = objectMapper.convertValue(jsonNode1, Student.class);

Я думаю, что это будет подходящим для ваших нужд!