2014-04-07 54 views
0

我正在使用Play 2.2.x将平面json对象映射为分层对象

我想使用Format将平面json对象映射到分层对象结构。这是一个例子。

case class Hobby(id: String, name: String) 
case class PersonWithHobby(id: String, name: String, hobby: Hobby) 

但我的JSON是一个扁平结构

{"id":"123, "name":"Joe", hobbyId:"abc", "hobbyName":"programming"} 

我试图找出如何做到这一点;

val personFormat = (
    (__ \ "id").format[String] and 
    (__ \ "name").format[String] and 
    ((__ \ "id").json.pick[String] and 
    (__ \ "name").json.pick[String]).format[Hobby] 
) 

当然,上面的代码不起作用。这只是想表明我想要做什么。

回答

1

这里的定义格式(从ScalaJsonCombinators结合几个概念)的好方法:

val personFormat: Format[PersonWithHobby] = (
(__ \ "id").format[String] and 
(__ \ "name").format[String] and 
    (
    (__ \ "hobbyId").format[String] and 
    (__ \ "hobbyName").format[String] 
)(Hobby.apply, unlift(Hobby.unapply)) 
)(PersonWithHobby.apply, unlift(PersonWithHobby.unapply)) 
+0

我发誓,我想这:(工作现在,谢谢。 – dingdong