2015-06-23 15 views
43

Ho bisogno di cambiare il valore di un attributo JSON in Java, posso ottenere il valore correttamente ma non riesco a modificare il JSON.Come modificare JsonNode in Java?

Ecco il codice qui sotto

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 è il modo migliore per farlo?

risposta

90

JsonNode è immutabile ed è destinato all'operazione di analisi. Tuttavia, può essere gettato in ObjectNode (e ArrayNode) che permettono mutazioni:

((ObjectNode)jsonNode).put("value", "NO"); 

Per una matrice, è possibile utilizzare:

((ObjectNode)jsonNode).putArray("arrayName").add(object.ge‌​tValue()); 
+0

processati per un tipo numerico in cui devo cambiare il valore. Ho ottenuto questa eccezione: 'Eccezione nel thread" main "java.lang.ClassCastException: com.fasterxml.jackson.databind.node.IntNode non può essere trasmesso a com.fasterxml.jackson.databind.node.ObjectNode' –

1

È necessario ottenere l'oggetto di tipo ObjectNode per impostare i valori. Date un'occhiata a this

0

Penso che si può solo lanciare a ObjectNode e utilizzare put metodo . Simili

ObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");