2015-11-20 13 views
5

Ich kodiere eine Funktion, in der ich json lese und schreibe. Allerdings kann ich die JSON-Elemente aus einer Datei lesen, aber nicht dasselbe geladene Objekt bearbeiten. Hier ist mein Code, an dem ich gerade arbeite.So ändern Sie ein javax.json.JsonObject-Objekt?

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 

    } 

Ich bekomme die folgende Ausnahme, wenn ich es ausführen.

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) 

Antwort

6

Die javadoc of JsonObject Staaten

JsonObject Klasse stellen einen unveränderlichen JSON Objektwert ( eine ungeordnete Sammlung von null oder mehr Namen/Wert-Paaren). Es bietet auch nicht änderbare Kartenansicht zu den JSON-Objektnamen/Wertzuordnungen.

Sie können diese Objekte nicht ändern.

Sie müssen eine Kopie erstellen. Es scheint keinen direkten Weg dafür zu geben. Es sieht so aus, als müssten Sie Json.createObjectBuilder() verwenden und es selbst erstellen (siehe das Beispiel in der Javadoc-Verknüpfung).

+0

Danke. Das klingt richtig, aber das Erstellen eines neuen Objekts ist mühsam. Ein Blick in Gson, wenn sie einen leichten Zugang haben. – wayfare

+0

@Himanshu Gson hat sein eigenes veränderbares 'JsonObject'. Jackson hat alternativ "ObjectNode", das auch veränderbar ist. –

+0

Gibt es eine größere Präferenz? Ich muss nur zum Lesen -> Bearbeiten -> Speichern. – wayfare

Verwandte Themen