如何使用 Scala 组合器读取可选的 json 值以防 class
How to read optional json values in case class using scala combinators
我正在尝试处理 JSON,它可以有选择地包含 'info' 及其包含。在以下情况下捕获 class 和组合器以读取对象中的 JSON 。但是代码无法编译。有更好的方法来处理这个吗?信息可以为空。
case class Info(sometimestamp: Option[Long])
object Info {
implicit val InfoReads: Reads[Info] = (
(JsPath \ "sometimestamp").readNullable[Long]
)(Info.apply _)
}
{
...
"info" : {
"sometimestamp" : 1414535323436
}
}
编译错误:
found : play.api.libs.json.Reads[Option[Long]]
[error] required: play.api.libs.json.Reads[models.Payload.Info]
[error] ) (Info.apply _)
scala 版本:2.11.2
谢谢,
我认为当您实际上没有组合任何东西时,组合器的函数式语法不起作用。但是,这样做:
implicit val InfoReads: Reads[Info] =
(JsPath \ "sometimestamp").readNullable[Long].map(Info(_))
对于这种简单的情况,您也可以考虑只使用 JSON 初始宏 class:
implicit val InfoReads: Reads[Info] = Json.reads[Info]
我正在尝试处理 JSON,它可以有选择地包含 'info' 及其包含。在以下情况下捕获 class 和组合器以读取对象中的 JSON 。但是代码无法编译。有更好的方法来处理这个吗?信息可以为空。
case class Info(sometimestamp: Option[Long])
object Info {
implicit val InfoReads: Reads[Info] = (
(JsPath \ "sometimestamp").readNullable[Long]
)(Info.apply _)
}
{
...
"info" : {
"sometimestamp" : 1414535323436
}
}
编译错误:
found : play.api.libs.json.Reads[Option[Long]]
[error] required: play.api.libs.json.Reads[models.Payload.Info]
[error] ) (Info.apply _)
scala 版本:2.11.2
谢谢,
我认为当您实际上没有组合任何东西时,组合器的函数式语法不起作用。但是,这样做:
implicit val InfoReads: Reads[Info] =
(JsPath \ "sometimestamp").readNullable[Long].map(Info(_))
对于这种简单的情况,您也可以考虑只使用 JSON 初始宏 class:
implicit val InfoReads: Reads[Info] = Json.reads[Info]