J'ai besoin de changer la valeur d'un attribut JSON en Java, je peux obtenir la valeur correctement mais je n'ai pas pu modifier le JSON.
voici le code ci-dessous
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
}
}
}
Quelle est la meilleure façon de procéder?
resultMap = mapper.convertValue(aJsonNode, Map.class);
modifier dans la carte, puis changer cette carte en un JsonNode. Juste dire.Réponses:
JsonNode
est immuable et est destiné à une opération d'analyse. Cependant, il peut être converti enObjectNode
(etArrayNode
) qui autorise les mutations:Pour un tableau, vous pouvez utiliser:
la source
Exception in thread "main" java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
En ajoutant une réponse, car d'autres l'ont voté dans les commentaires de la réponse acceptée, ils obtiennent cette exception lorsqu'ils tentent de convertir en ObjectNode (moi-même inclus):
La solution consiste à obtenir le nœud «parent» et à effectuer un
put
remplacement effectif du nœud entier, quel que soit le type de nœud d'origine.Si vous avez besoin de "modifier" le nœud en utilisant la valeur existante du nœud:
get
la valeur / le tableau duJsonNode
put
le parent.Code, dont le but est de modifier
subfield
, qui est le nœud enfant deNodeA
etNode1
:Crédits:
J'ai eu cette inspiration d' ici , grâce à wassgreen @
la source
La réponse @ Sharon-Ben-Asher est correcte.
Mais dans mon cas, pour un tableau, je dois utiliser:
la source
Je pense que vous pouvez simplement convertir ObjectNode et utiliser la
put
méthode. Comme çaObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
la source
Vous devez obtenir
ObjectNode
un objet de type pour définir des valeurs. Jetez un œil à cecila source
Juste pour comprendre les autres qui peuvent ne pas avoir une vue d'ensemble claire, le code suivant fonctionne pour moi pour trouver un champ, puis le mettre à jour
la source