javax.json:将新的 JsonNumber 添加到现有的 JsonObject

2022-09-02 11:41:46

我想将属性添加到 的现有实例中。如果此属性为 ,这很容易:JsonObjectboolean

JsonObject jo = ....;
jo.put("booleanProperty", JsonValue.TRUE);

但是,我也想添加一个,但我找不到创建.以下是我能做的:JsonNumberJsonNumber

JsonObjectBuilder job = Json.createObjectBuilder();
JsonNumber jn = job.add("number", 42).build().getJsonNumber("number");
jo.put("numberProperty", jn);

但是我想不出一个更肮脏的方法来完成我的任务。那么 - 有没有更直接,更简洁的方法来向现有实例添加?JsonNumberJsonObject


答案 1

好吧,我自己就想通了:你不能

JsonObject应该是不可变的。即使存在,在运行时,这也会抛出一个 .因此,如果您想向现有密钥/值对添加键/值对,则需要类似的东西JsonObject.put(key, value)UnsupportedOperationExceptionJsonObject

private JsonObjectBuilder jsonObjectToBuilder(JsonObject jo) {
    JsonObjectBuilder job = Json.createObjectBuilder();

    for (Entry<String, JsonValue> entry : jo.entrySet()) {
        job.add(entry.getKey(), entry.getValue());
    }

    return job;
}

然后将其与

JsonObject jo = ...;
jo = jsonObjectToBuilder(jo).add("numberProperty", 42).build();

答案 2

尝试使用 JsonPatch

String json ="{\"name\":\"John\"}";
JsonObject jo = Json.createReader(new StringReader(json)).readObject();
JsonPatch patch = Json.createPatchBuilder()
        .add("/last","Doe")
        .build();
jo = patch.apply(jo);
System.out.println(jo);