Scala JSON读/写

时间:2014-03-24 00:15:56

标签: json scala playframework

我开始玩Scala,在播放框架页面做一些例子时,我发现了一些我无法解决的问题。我在Scala很新,所以我请原谅。

为什么这个编译没有错误:

case class Location(lat: Double, long: Double)

implicit val locationReads: Reads[Location] = (
    (JsPath \ "lat").read[Double] and
        (JsPath \ "long").read[Double]
    )(Location.apply _)

但是这个不会编译:

case class Location(lat: Double)

implicit val locationReads: Reads[Location] = (
    (JsPath \ "lat").read[Double]
    )(Location.apply _)

并显示错误:

  

使用替代方法读取重载的方法值:   [错误](t:Double)play.api.libs.json.Reads [Double]   [错误](隐式r:play.api.libs.json.Reads [Double])play.api.libs.json.Reads [Double]   [错误]无法应用于(Double => biz.JsonProtocol.Location)   [错误](JsPath \“lat”)。读取[Double]

2 个答案:

答案 0 :(得分:4)

事实证明,在播放版本< = 2.1(已将其标记为solved)中使用具有单字段案例类的JSON组合器时存在一些限制。有关可能的解决方案,请参阅this问题。

答案 1 :(得分:1)

看起来你不能拥有只有纬度的biz.JsonProtocol.Location ......这就是为什么你的示例使用lat和long工作但只是lat赢了编译