JsObject
has a +
method that allows you to add fields to an object, but unfortunately your jsonObject
is statically typed as a JsValue
, not a JsObject
. You can get around this in a couple of ways. The first is to use as
:
scala> jsonObject.as[JsObject] + ("c" -> Json.toJson(3))
res0: play.api.libs.json.JsObject = {"a":1,"b":2,"c":3}
With as
you're essentially downcasting—you're telling the compiler, "you only know that this is a JsValue
, but believe me, it's also a JsObject
". This is safe in this case, but it's not a good idea. A more principled approach is to use the OWrites
directly:
scala> val jsonObject = classAWrites.writes(classAObject)
jsonObject: play.api.libs.json.JsObject = {"a":1,"b":2}
scala> jsonObject + ("c" -> Json.toJson(3))
res1: play.api.libs.json.JsObject = {"a":1,"b":2,"c":3}
Maybe someday the Json
object will have a toJsonObject
method that will require a OWrites
instance and this overly explicit approach won't be necessary.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…