序列化对象时添加字段

时间:2014-09-29 08:34:29

标签: json playframework playframework-2.3

我有一个案例类

case class Foo(bar: Int, baz: String)

我正在尝试为它编写JSON序列化。但是我还有一个额外的要求,就是在生成的Json中添加一个字段(比如"问候":" Hello")

我正在尝试这些方面:

val writes = ((JsPath \ "bar").write[Int] and
   (JsPath \ "baz").write[String] and
   (JsPath \ "greeting").write[String])(unlift(Foo.unapply))

但是,我应该如何传递静态" Hello"字符串到上面写的?

如何使用此writes为我的Format课程创建Foo

3 个答案:

答案 0 :(得分:1)

我会这样做:

val writes = Writes[Foo](f => {
  Json.obj(
    "bar" -> f.bar,
    "baz" -> f.baz,
    "greeting" -> "Hello")
})

缺点是您必须指定两次成员,但对于需要额外控制的特殊情况,它很方便。

答案 1 :(得分:1)

在一次性场景中,您不想再定义另一个Writes,您可以这样做:

Json.toJson(foo).as[JsObject] ++ Json.obj("greeting" -> "hello")

答案 2 :(得分:0)

我最终得到了另一种解决方案:

val writes = ((JsPath \ "bar").write[Int] and
  (JsPath \ "baz").write[String] and
  (JsPath \ "greeting").write[String])((f: Foo) => (f.bar, f.baz, "Hello"))