我想将属性添加到JsonObject
的现有实例中。如果此属性为boolean
,则非常简单:
JsonObject jo = ....;
jo.put("booleanProperty", JsonValue.TRUE);
但是,我还想添加JsonNumber
,但我找不到创建JsonNumber
实例的方法。这就是我能做的:
JsonObjectBuilder job = Json.createObjectBuilder();
JsonNumber jn = job.add("number", 42).build().getJsonNumber("number");
jo.put("numberProperty", jn);
但我想不出一种更肮脏的方式来完成我的任务。那么,是否有更直接,更清晰的方法可以将JsonNumber
添加到JsonObject
的现有实例中?
答案 0 :(得分:26)
好的,我只是想出了自己:你不能。
JsonObject
应该是不可变的。即使JsonObject.put(key, value)
存在,在运行时也会抛出UnsupportedOperationException
。因此,如果您想为现有JsonObject
添加键/值对,则需要类似
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();
答案 1 :(得分:1)
JsonObject是不可变的,但可以使用lambdas复制到JsonObjecBuilder中。
JsonObject source = ...
JsonObjectBuilder target = Json.createObjectBuilder();
source.forEach(target::add); // copy source into target
target.add("name", "value"); // add or update values
JsonObject destination = target.build(); // build destination
答案 2 :(得分:0)
尝试使用JsonPatch
String json ="{\"name\":\"John\"}";
JsonObject jo = Json.createReader(new StringReader(json)).readObject();
JsonPatch path = Json.createPatchBuilder()
.add("/last","Doe")
.build();
jo = path.apply(jo);
System.out.println(jo);