2015-11-20 18 views
5

Json'u okuduğum ve yazdığım bir özelliği kodluyorum. Ancak json öğelerini bir dosyadan okuyabilir ancak aynı yüklü nesneyi düzenleyemiyorum. İşte üzerinde çalıştığım kodum.Bir javax.json.JsonObject Nesnesi Nasıl Değiştirilir?

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 

    } 

Çalıştırdığımda aşağıdaki özel durumları alıyorum.

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) 

cevap

6

javadoc of JsonObject durumları

JsonObject sınıfı, iletmenin JSON nesnesi değeri (sıfır ya da daha fazla isim/değer çiftleri bir sırasız) temsil eder. Ayrıca JSON nesne adı/değer eşleştirmeleri için değiştirilemez harita görünümü sağlar.

Bu nesneleri değiştiremezsiniz.

Kopya oluşturmalısınız. Bunu yapmak için doğrudan bir yol yok gibi görünüyor. Json.createObjectBuilder()'u kullanmanız ve kendiniz oluşturmanız gerekecek gibi görünüyor (javadoc'taki bağlantıya bakın).

+0

Teşekkürler. Bu ses doğru ama yeni bir nesne yaratmak sıkıcı. Bazı kolay yaklaşımları varsa Gson'a bakıyorum. – wayfare

+0

@Himanshu Gson kendi değiştirilebilir JsonObject'ine sahiptir. Jackson, alternatif olarak, aynı zamanda değişebilir olan ObjectNode'u da içerir. –

+0

herhangi bir büyük tercih var mı? Sadece okumaya ihtiyacım var -> düzenle -> kaydet. – wayfare