2016-08-18 48 views
2

我正在使用JDK 1.8.0_101並將javax.json.jar添加到類路徑中。下面的編譯很好,但會引發錯誤。它看起來像刪除()方法尚未實施。從javax.json.JsonObject中刪除鍵值對

public class Test{ 
    public static void main(String[] args) { 
     javax.json.JsonObject o = javax.json.Json.createObjectBuilder().add("a", 1).add("b", 2).build(); 
     try { 
      o.remove("a"); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

這是輸出:

java.lang.UnsupportedOperationException 
    at java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1.remove(Collections.java:1664) 
    at java.util.AbstractMap.remove(AbstractMap.java:254) 
    at Test.main(Test.java:5) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

我怎樣才能解決,否則我什麼時候能實施這種方法嗎?我使用舊版本的javax.json庫嗎?

+0

你爲什麼要刪除一個對象的屬性時,你可以忽略它? – Kadima

+0

該對象必須發送到另一個應用程序,並且不必具有該信息。 – fabiog

+2

因爲JsonObject顯然[記錄](http://docs.oracle.com/javaee/7/api/index.html?javax/json/JsonObject.html)是不可變的,所以不能指望這種情況發生。 javadoc甚至說:*此映射對象提供對JSON對象數據的只讀訪問權限,並試圖修改映射,無論是直接映射還是通過其集合視圖,都會導致UnsupportedOperationException。* –

回答

1

您可以使用JsonObjectBuilder刪除任何元素。

例如:

public class Test{ 
    public static void main(String[] args) { 
     javax.json.JsonObject full = javax.json.Json.createObjectBuilder().add("a", 1).add("b", 2).build(); 
     full = javax.json.Json.createObjectBuilder(full).remove("a").build(); 
     System.out.println(full); // return {"b":2} 
    } 
}