簡體   English   中英

如何更改 JsonArray 中的 JsonObject?

[英]How to change JsonObject in JsonArray?

我正在使用javax.json並且當我嘗試在我的jsonArray更改jsonObject時:

String jsonString = "[{\"name\":\"xyz\"," +
                        "\"URL\":\"http://example.com\"}]";
JsonReader jsonReader = Json.createReader(new StringReader(jsonString));
JsonArray jsonArray = jsonReader.readArray();

String jsonNewString = "{\"name\":\"zyx\","
                         + "\"URL\":\"http://example2.com\"}]";   
jsonReader = Json.createReader(new StringReader(jsonNewString));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();

jsonArray.remove(0);
jsonArray.add(0, jsonObject);

我得到了這個例外:

java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)

我也試過: jsonArray.set(0, jsonObject); ,並得到相同的UnsupportedOperationException

JsonArray的Javadoc狀態

JsonArray表示一個不變的JSON數組(零個或多個值的有序序列)。 它還提供了數組中值的不可修改的列表視圖。

您無法更改。 用所需的值創建一個新值。

JsonObject 和 JsonArray 是不可變的,因此您無法修改對象,您可以使用此示例並嘗試從中獲得啟發:

創建一個包含相同值的新 JsonObject 並向其中添加一些元素..

例子 :

    import java.io.ByteArrayInputStream;
    import java.io.InputStream;

    import javax.json.Json;
    import javax.json.JsonArray;
    import javax.json.JsonArrayBuilder;
    import javax.json.JsonObject;
    import javax.json.JsonObjectBuilder;
    import javax.json.JsonReader;
    import javax.json.JsonValue;


    public class Jsonizer {
    public static void main(String[] args) {

    try {
    String s = "{\"persons\": [ {\"name\":\"oussama\",\"age\":\"30\"}, {\"name\":\"amine\",\"age\":\"25\"} ]}";
    InputStream is = new ByteArrayInputStream(s.getBytes());
    JsonReader jr = Json.createReader(is);
    JsonObject jo = jr.readObject();
    System.out.println("Before :");
    System.out.println(jo);
    JsonArray ja = jo.getJsonArray("persons");

    InputStream targetStream = new ByteArrayInputStream("{\"name\":\"sami\",\"age\":\"50\"}".getBytes());
    jr = Json.createReader(targetStream);
    JsonObject newJo = jr.readObject();
    JsonArrayBuilder jsonArraybuilder = Json.createArrayBuilder();
    jsonArraybuilder.add(newJo);
    
    for (JsonValue jValue : ja) {
        jsonArraybuilder.add(jValue);
    }
    
    ja = jsonArraybuilder.build();
    JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder();
    jsonObjectBuilder.add("persons", ja);
    JsonObject jsonAfterAdd = jsonObjectBuilder.build();
    System.out.println("After");
    System.out.println(jsonAfterAdd.toString());

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}
}

輸出 :

     Before :
     {"persons":[{"name":"oussama","age":"30"},{"name":"amine","age":"25"}]}
     After
     {"persons":[{"name":"sami","age":"50"},{"name":"oussama","age":"30"},{"name":"amine","age":"25"}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM