【发布时间】:2014-04-05 04:06:47
【问题描述】:
给定以下 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 Json deserializer found for type List[models.Deal]. Try to implement an implicit Reads or Format for this type.
【问题讨论】:
-
您是否尝试为
Deal制作Json.reads而不是List[Deal]?像这样:implicit val dealReader = Json.reads[Deal] -
另外,如果你打算使用
.validate[List[Deal]].get,你也可以只使用.as[List[Deal]],因为你放弃了使用JsResult和.get调用的好处。 -
@Carsten 使用
Deal而不是List[Deal]有效!非常感谢。我想,我以前试过这个…… -
@Ryan 我考虑了你的建议。谢谢!
标签: json scala playframework