Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import play.api.libs.functional.syntax._
- import play.api.libs.json._
- case class Foo(id: String, bar: Option[Bar])
- object Foo {
- implicit val format = Json.format[Foo]
- }
- case class Bar(id: String, foos: Option[Seq[Foo]])
- object Bar {
- implicit val format: Format[Bar] = (
- (__ \ 'id).format[String] and
- (__ \ 'foos).lazyFormatNullable(implicitly[Format[Seq[Foo]]])
- )(Bar.apply, unlift(Bar.unapply))
- }
- // foo1 contains bar1 which contains foo2
- val jsonStr = """{ "id": "foo1", "bar": { "id": "bar1", "foos": [ { "id": "foo2" } ] } }"""
- val json = Json.parse(jsonStr)
- val foo = json.as[Foo]
- // Did it work?
- foo.bar.flatMap(_.foos).flatMap(_.headOption).map(_.id).contains("foo2")
- // Complete round trip
- Json.toJson(foo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement