【问题标题】:How to read optional json values in case class using scala combinators如何使用 scala 组合器读取案例类中的可选 json 值
【发布时间】:2015-01-30 21:49:12
【问题描述】:

我正在尝试处理可以选择包含“信息”及其包含的 JSON。在以下案例类和组合器中捕获以读取对象中的 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

谢谢,

【问题讨论】:

    标签: json scala combinators


    【解决方案1】:

    我不认为组合器的函数式语法在您实际上没有组合任何东西时起作用。但是,这样做:

    implicit val InfoReads: Reads[Info] = 
        (JsPath \ "sometimestamp").readNullable[Long].map(Info(_))
    

    您也可以考虑只为这样一个简单的案例类使用 JSON inception 宏:

    implicit val InfoReads: Reads[Info] = Json.reads[Info]
    

    【讨论】:

    • 我选择第一个选项。虽然我现在没有太多“信息”,但我知道我会在下一次修订中添加更多内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2020-08-27
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多