2014-09-29 18 views
0

我有一個案例類添加一個字段,而序列化對象

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

,我試圖寫一個JSON序列化它。但我有一個額外的要求,多了一個字段添加到生成的JSON(說「問候語」:「你好」)

我想沿着這些路線的東西:

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

但是,我應該怎麼將靜態的「Hello」字符串傳遞給上面的Writes?

如何使用此writes爲我的Foo類創建Format

回答

1

我會做這樣的:

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

缺點是,你必須指定兩次成員,但它的方便在特殊情況下是這樣,你需要額外的控制。

0

我已經結束了另一種解決方案:

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

在一次性的場景中,你不想定義另一個Writes,你可以這樣做:

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