使用一个参数播放JSON序列化/反序列化case类,方法是跳过它

时间:2017-03-29 13:24:48

标签: playframework-2.0 play-json

我有以下对象:

case class Foo(value: UUID)
case class Bar(foo: Foo)

我想在JSON中将它们序列化为这样:

{foo: "e88ad5ea-13cf-4666-addb-c231c12cd3a3"}

意思是我想省略自动格式化程序添加的“value”参数,如果我只是写这个:

implicit val fooFormat = Json.format[Foo]
implicit val barFormat = Json.format[Bar]

我尝试编写自定义编写器/读者,但我真的不知道如何跳过JPath。

1 个答案:

答案 0 :(得分:0)

怎么样:

implicit val format: Format[Bar] = new Format[Bar] {
   override def writes(o: Bar): JsValue = Json.obj("foo" -> o.foo.value)

override def reads(json: JsValue): JsResult[Bar] =
  (json \ "foo").validate[String].map(s => Bar(Foo(UUID.fromString(s))))
}