javax.json:将新的JsonNumber添加到现有的JsonObject
我想将属性添加到现有的JsonObject
实例。 如果此属性是boolean
,这很容易:
JsonObject jo = ....; jo.put("booleanProperty", JsonValue.TRUE);
但是,我还想添加一个JsonNumber
但是我找不到创建JsonNumber
实例的JsonNumber
。 这是我能做的:
JsonObjectBuilder job = Json.createObjectBuilder(); JsonNumber jn = job.add("number", 42).build().getJsonNumber("number"); jo.put("numberProperty", jn);
但我想不出一个更脏的方式来完成我的任务。 那么 – 是否有更直接,更清晰的方法将JsonNumber
添加到现有的JsonObject
实例中?
好吧,我只是想出了自己: 你做不到 。
JsonObject
应该是不可变的。 即使JsonObject.put(key, value)
存在,在运行时也会抛出UnsupportedOperationException
。 因此,如果要为现有的JsonObject
添加键/值对,则需要类似的东西
private JsonObjectBuilder jsonObjectToBuilder(JsonObject jo) { JsonObjectBuilder job = Json.createObjectBuilder(); for (Entry entry : jo.entrySet()) { job.add(entry.getKey(), entry.getValue()); } return job; }
然后用它
JsonObject jo = ...; jo = jsonObjectToBuilder(jo).add("numberProperty", 42).build();
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