我想将属性添加到现有的实例中JsonObject.如果是这个属性boolean,这很容易:
JsonObject jo = ....;
jo.put("booleanProperty", JsonValue.TRUE);
Run Code Online (Sandbox Code Playgroud)
但是,我也想添加一个,JsonNumber但我找不到创建实例的方法JsonNumber.这是我能做的:
JsonObjectBuilder job = Json.createObjectBuilder();
JsonNumber jn = job.add("number", 42).build().getJsonNumber("number");
jo.put("numberProperty", jn);
Run Code Online (Sandbox Code Playgroud)
但我想不出一个更脏的方式来完成我的任务.那么 - 是否有更直接,更清晰的方法来添加JsonNumber到现有的实例JsonObject?
aRe*_*ess 30
好吧,我只是想出了自己:你做不到.
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;
}
Run Code Online (Sandbox Code Playgroud)
然后用它
JsonObject jo = ...;
jo = jsonObjectToBuilder(jo).add("numberProperty", 42).build();
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试使用 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);
Run Code Online (Sandbox Code Playgroud)
JsonObject 是不可变的,但可以使用 lambda 复制到 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10138 次 |
| 最近记录: |