如何在JsonArray中更改JsonObject?

3

我正在使用 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错误。
2个回答

4

JsonArray 的 javadoc 表明:

JsonArray 表示一个不可变的 JSON 数组(零个或多个值的有序序列)。它还提供了数组中值的不可修改列表视图。

您无法更改它。请使用您想要的值创建一个新的 JsonArray


0

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"}]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接