我需要在使用Scala的Play框架中添加Json对象字段,但遇到了问题:
我有一个包含数据的case类。例如:
case class ClassA(a:Int,b:Int)
我可以使用Json Writes创建一个Json对象:
val classAObject = ClassA(1,2)
implicit val classAWrites= Json.writes[ClassA]
val jsonObject = Json.toJson(classAObject)
JSON 的格式如下:
{ a:1, b:2 }
假设我想要向Json对象中添加一个额外的“c”字段。结果:
{ a:1, b:2, c:3 }
我该如何做到这一点,而不创建一个新的case类或自己使用Json.obj创建我的Json对象?我正在寻找像这样的东西:jsonObject.merge({c:3})
感谢任何帮助!
Writes.writes
返回JsValue
,因此我不明白你如何消除向上转型(REPL 中没有)。 - TvarohclassAWrites
将被静态类型化为OWrites[ClassA]
(在 Play 2.2 和 2.3 上以及在 2.10 和 2.11 上)。这是由于 Scala 宏的“未指定但预期”行为所致(有关详细信息,请参见我的问题此处)。 - Travis BrownWrites
实例,你会得到JsValue
,但如果你手动定义了一个OWrites
实例或使用Json.writes
宏(这就是OP正在做的),你会得到一个JsObject
。 - Travis Brownjsobj + "key" -> entity.key
。 - Wrench+
和-
具有相同的优先级,因此括号绝对是必要的。 - Travis Brown