Preciso alterar o valor de um atributo JSON em Java, posso obter o valor corretamente, mas não consegui modificar o JSON.
aqui está o código abaixo
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
}
}
}
Qual é a melhor maneira de fazer isso?
resultMap = mapper.convertValue(aJsonNode, Map.class);
modificá-lo no mapa e, em seguida, alterar esse mapa de volta para um JsonNode. Apenas dizendo.Respostas:
JsonNode
é imutável e destina-se à operação de análise. No entanto, pode ser lançado emObjectNode
(eArrayNode
) que permitem mutações:Para uma matriz, você pode usar:
fonte
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Adicionando uma resposta como alguns outros votaram positivamente nos comentários da resposta aceita, eles estão recebendo esta exceção ao tentar lançar para ObjectNode (eu incluído):
A solução é obter o nó 'pai' e realizar uma
put
substituição efetiva de todo o nó, independentemente do tipo de nó original.Se você precisar "modificar" o nó usando o valor existente do nó:
get
o valor / matriz doJsonNode
put
o pai.Código, onde o objetivo é modificar
subfield
, que é o nó filho deNodeA
eNode1
:Créditos:
Tirei essa inspiração daqui , graças a wassgreen @
fonte
A resposta @Sharon-Ben-Asher está ok.
Mas, no meu caso, para um array, preciso usar:
fonte
Acho que você pode apenas lançar em ObjectNode e usar o
put
método. Como issoObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
fonte
Você precisa obter o
ObjectNode
objeto de tipo para definir os valores. Dê uma olhada nissofonte
Apenas para compreender os outros que podem não entender todo o quadro, seguir o código funciona para mim encontrar um campo e depois atualizá-lo
fonte