在Play应用程序中编写json格式化程序时出错

时间:2014-10-14 13:11:08

标签: json scala playframework

我在Scala中编写了一个Play 2.3.2应用程序。 我编写了一个表示系统中类别和属性之间相关性的类。 该类声明如下:

case class Correlation(val category: String, val attribute: String,
                  val value: Double, val weight: Double)

现在我正在写一个json格式化程序,但我遇到了一些错误。 Formatter的写法如下:

object CorrelationFormatters {

   implicit val storageFormatter: Format[Correlation] = {     
   val correlationReads: Reads[Correlation] = (
       (__ "category").read[String] and
       (__ "attribute").read[String] and
       (__ "value").read[Double] and
       (__ "weight").read[Double]
       )(Correlation.apply _)

   val correlationWrites: Writes[Correlation] = (
        (__ "category").write[String] and
        (__ "attribute").write[String] and
        (__ "value").write[Double] and
        (__ "weight").write[Double]
        )(unlift(Correlation.unapply _))
   }


}

但我收到以下编译错误:

error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/formatters/json/CorrelationFormatters.scala:19: ')' expected but string literal found.
[error]        (__ "category").read[String] and
[error]            ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/formatters/json/CorrelationFormatters.scala:31: ')' expected but '}' found.
[error]    }
[error]    ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/formatters/json/CorrelationFormatters.scala:19: ')' expected but string literal found.
[error]        (__ "category").read[String] and
[error]            ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/formatters/json/CorrelationFormatters.scala:31: ')' expected but '}' found.
[error]    }
[error]    ^
[error] two errors found

出了什么问题? 我已经使用过类似ScalaJsonCombinators的教程,但是我无法找到我错在哪里。

2 个答案:

答案 0 :(得分:2)

Try with:

object Correlation {
  implicit val jsonModelReads = Json.reads[Correlation]
  implicit val jsonModelWrites = Json.writes[Correlation]
  implicit val jsonModelFormat = Json.format[Correlation]
}

然后import Correlation._

答案 1 :(得分:2)

非常简单的修复:

 (__ "category").read[String]

应该是

(__ \ "category").read[String]

对于所有其他线路也是如此..