Мне нужно изменить значение атрибута JSON в Java, я могу получить значение правильно, но не могу изменить JSON.
вот код ниже
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
}
}
}
Как лучше всего это сделать?
resultMap = mapper.convertValue(aJsonNode, Map.class);
изменить его в Map, а затем снова изменить эту карту на JsonNode. Просто говорю.Ответы:
JsonNode
неизменяема и предназначена для синтаксического анализа. Однако его можно преобразовать вObjectNode
(иArrayNode
), разрешающие мутации:Для массива вы можете использовать:
источник
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Добавление ответа, поскольку некоторые другие поддержали комментарии к принятому ответу, они получают это исключение при попытке привести к ObjectNode (включая меня):
Решение состоит в том, чтобы получить «родительский» узел и выполнить
put
, эффективно заменяя весь узел, независимо от исходного типа узла.Если вам нужно «изменить» узел, используя существующее значение узла:
get
значение / массивJsonNode
put
родителя.Код, цель которого - изменить
subfield
, который является дочерним узломNodeA
иNode1
:Кредиты:
Отсюда я черпал вдохновение благодаря wassgreen @
источник
Ответ @ Sharon-Ben-Asher в порядке.
Но в моем случае для массива я должен использовать:
источник
Я думаю, вы можете просто указать ObjectNode и использовать
put
метод. Как этоObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
источник
Вам нужно получить
ObjectNode
объект типа, чтобы устанавливать значения. Взгляните на этоисточник
Просто ради понимания других, которые могут не получить полную картину, следующий код работает для меня, чтобы найти поле, а затем обновить его
источник