繁体   English   中英

播放2.2.2(Scala)Json解析为List [Class]问题

[英]Play 2.2.2 (Scala) Json parse as List[Class] issue

给定以下Json数组:

{
    "success": true,
    "data": [
        {
            "id": 594,
            "stage_id": 15,
            "title": "test deal",
            "value": 0,
            "currency": "EUR",
            "add_time": "2014-03-18 17:45:51",
            "update_time": "2014-03-24 13:30:27",
            "stage_change_time": "2014-03-24 13:30:27",
            "active": true,
            "deleted": false,
            "status": "open",
            "expected_close_date": null,
            "stage_order_nr": 1,
            "person_name": "test"
        },
        {
            "id": 601,
            "stage_id": 15,
            "title": "test deal2 deal",
            "value": 0,
            "currency": "EUR",
            "add_time": "2014-03-24 14:11:00",
            "update_time": "2014-03-24 14:11:00",
            "stage_change_time": "2014-03-24 14:11:00",
            "active": true,
            "deleted": false,
            "status": "open",
            "expected_close_date": null,
            "stage_order_nr": 1,
            "person_name": "test deal2"
        }
    ],
    "additional_data": {
        "pagination": {
            "start": 0,
            "limit": 100,
            "more_items_in_collection": false
        }
    }
}

我希望从中获得一份交易清单,我正在尝试这样做

case class Deal(id: Long, stage_id: Long)

  def getAllDeals(): List [Deal] = {

    var holder : WSRequestHolder = WS.url(PipeDriveApiBaseUrl + "/deals")

    val complexHolder: WSRequestHolder = holder.withQueryString("filter_id" -> "9", "api_token" -> SalesManagerApiKey)
    val futureResponse: Future[Response] = complexHolder.get()

    implicit val dealReader = Json.reads[List[Deal]]

    val futureJson: Future[List[Deal]] = futureResponse.map(
      response => (response.json \ "data").validate[List[Deal]].get
    )

我得到异常No unapply function found与隐式读取值相关的No unapply function found 但是对它进行评论,我将为No Json deserializer found for type List[models.Deal]. Try to implement an implicit Reads or Format for this type. No Json deserializer found for type List[models.Deal]. Try to implement an implicit Reads or Format for this type.

我无法在这里这里解决这些问题的问题。 我有什么想念或误解?

相反,定义一个隐含的Json.readsList[Deal] ,创建一个Deal

implicit val dealReader = Json.reads[Deal]

Play已经有一个用于列表的内置隐式JSON读取转换器。 实际上,它适用于所有Traversables。 您可以查看代码 ,但有点难以阅读。 问题是:Play可以将JSON列表转换为List对象。 它不知道的是如何阅读/转换Deal ,这就是为什么你需要上面提到的隐含定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM