如何在 scala 中使用函数式编程直接将 JSON 馈送到 CASE CLASS?

How to feed JSON to CASE CLASS directly using functional programming in scala?

{
    "cars": [{
        "amount": 120.00,
        "name": "Car1"
    }, {
        "amount": 245.00,
        "name": "Car2"
    }]
}

我正在阅读上面 JSON 在我的控制器中的以下内容

val body: JsObject = request.body.asInstanceOf[JsObject]

我有以下案例CLASS

case class BIC(name: String, amount: Double)

我想通过从 JSON 中读取数据来创建 List[BIC] 对象 [例如body] 使用函数式样式

首先,为您的模型定义两种情况 类:

object Models {
  case class Bic(name : String, amount : Double)

  object Bic {
    implicit val BicFormat = Json.format[Bic]
  }

  case class Cars(bics : List[Bic])

  object Cars {
    implicit val CarsFormat = Json.format[Cars]    
  }

}

您正在使用 Play Framework,因此您可以使用 JSON 库。

在你的控制器中,如果你想阅读 bics,你可以这样做:

def getCars = Action(parse.json) { request =>
    request.body.validate[Cars] map { cars =>
      // treat your cars ..
    }
}

使用Play JSON.

示例:

case class Wrapper(cars: List[Bic])
case class BIC(name: String, amount: Double)

然后在你的控制器中:

implicit val wrapperFormats = Json.format[Wrapper]
implicit val bICFormats     = Json.format[BIC]

def postCars(): Action[JsValue] = Action(json.parse) { implicit request =>
  request.body.validate[Wrapper] match {
    case JsSuccess(obj, _) => {
      //do something with obj.
    }
    case JsError(err) => {
      BadRequest(
        JsObject(
          "error" -> err.toString
        )
      )
    }
  }
}

请注意,我要返回 Action[JsValue] 这是 JQuery 在使用 AJAX.

时 运行 success

希望对您有所帮助,

里斯

另一个参考: https://www.playframework.com/documentation/2.5.x/ScalaJsonCombinators