繁体   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