2015-11-20 31 views
5

Sto codificando una funzione in cui leggo e scrivo di nuovo JSON. Tuttavia posso leggere gli elementi JSON da un file, ma non posso modificare lo stesso oggetto caricato. Ecco il mio codice su cui sto lavorando.Come modificare un oggetto javax.json.JsonObject?

InputStream inp = new FileInputStream(jsonFilePath); 
    JsonReader reader = Json.createReader(inp); 

    JsonArray employeesArr = reader.readArray(); 
    for (int i = 0; i < 2; i++) { 
     JsonObject jObj = employeesArr.getJsonObject(i); 
     JsonObject teammanager = jObj.getJsonObject("manager"); 

     Employee manager = new Employee(); 
     manager.name = teammanager.getString("name"); 
     manager.emailAddress = teammanager.getString("email"); 
     System.out.println("uploading File " + listOfFiles[i].getName()); 
     File file = insertFile(...); 
     JsonObject tmpJsonValue = Json.createObjectBuilder().add("fileId", file.getId()).add("alternativeLink",file.getAlternateLink()).build(); 


     jObj.put("alternativeLink", tmpJsonValue.get("alternativeLink")); <-- fails here 

    } 

Ottengo la seguente eccezione quando lo eseguo.

Exception in thread "main" java.lang.UnsupportedOperationException 
at java.util.AbstractMap.put(AbstractMap.java:203) 
at com.mongodb.okr.DriveQuickstart.uploadAllFiles(DriveQuickstart.java:196) 
at com.mongodb.okr.App.main(App.java:28) 

risposta

6

I javadoc of JsonObject stati

JsonObject classe rappresenta un immutabile valore oggetto JSON (a non ordinato raccolta di zero o più coppie nome/valore ). Inoltre, fornisce una vista mappa non modificabile per il nome/i valori dei valori dell'oggetto JSON.

Non è possibile modificare questi oggetti.

È necessario creare una copia. Non sembra essere un modo diretto per farlo. Sembra che dovrai usare Json.createObjectBuilder() e compilarlo da solo (vedi l'esempio in javadoc collegato).

+0

Grazie. Suona corretto ma creare un nuovo oggetto è noioso. Guardando a Gson se hanno un approccio facile. – wayfare

+0

@Himanshu Gson ha il proprio 'JsonObject' mutabile. Jackson, in alternativa, ha 'ObjectNode', anch'esso mutabile. –

+0

c'è qualche preferenza importante? Ho solo bisogno di leggere -> Modifica -> Salva. – wayfare

Problemi correlati