Scala play json-don';t解析/反序列化为单参数case类
在Scala中,我想解析使用Travis CI REST API检索的JSON响应。为此,我决定使用play json库。除此之外,根据REST API“模式”,我还定义了以下案例类:Scala play json-don';t解析/反序列化为单参数case类,json,scala,parsing,play-json,Json,Scala,Parsing,Play Json,在Scala中,我想解析使用Travis CI REST API检索的JSON响应。为此,我决定使用play json库。除此之外,根据REST API“模式”,我还定义了以下案例类: case class Build(id : Int, repository_id : Int, commit_id : Int, number : String, event_type : String,
case class Build(id : Int,
repository_id : Int,
commit_id : Int,
number : String,
event_type : String,
pull_request : Boolean,
pull_request_title : String,
pull_request_number : String,
state : String,
started_at : String,
finished_at : String,
duration : Int,
job_ids : List[Int]) extends Serializable{
}
case class Builds(builds : List[Build])
实现本身应该是自解释的,但是如果需要任何进一步的描述,我将更新这个问题
除此之外,我还为play json库定义了以下读取:
implicit val buildReads : Reads[Build] = (
(JsPath \ "id").read[Int] and
(JsPath \ "repository_id").read[Int] and
(JsPath \ "commit_id").read[Int] and
(JsPath \ "number").read[String] and
(JsPath \ "event_type").read[String] and
(JsPath \ "pull_request").read[Boolean] and
(JsPath \ "pull_request_title").read[String] and
(JsPath \ "pull_request_number").read[String] and
(JsPath \ "state").read[String] and
(JsPath \ "started_at").read[String] and
(JsPath \ "finished_at").read[String] and
(JsPath \ "duration").read[Int] and
(JsPath \ "job_ids").read[List[Int]]
)(Build.apply _)
implicit val buildsReads : Reads[Builds] = (__ \ "builds").read[List[Build]].map(Builds(_))
代码会编译,模式(即案例类)会确认REST API响应,但是,在验证响应时,会出现以下错误:
JsError(列表)(/builds(0)/pull_请求_标题,列表(ValidationError(列表(error.expected.jsstring),WrappedArray()),(/builds(0)/pull_请求_编号,列表(ValidationError(error.expected.jsstring),WrappedArray()),(/builds(1)/pull_请求_标题,列表(ValidationError.expected.jsstring,WrappedArray()),(/builds(1)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(2)/pull_请求标题,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(2)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray())),(/builds(3)/pull_请求标题,列表(ValidationError)(List(error.expected.jsstring),WrappedArray()),(/builds(3)/pull_请求_编号,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(4)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(4)/pull_请求_编号,List(ValidationError.expected.jsstring),WrappedArray())))),(/builds(5)/pull_请求_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(5)/pull_请求_number,List(ValidationError(error.expected.jsstring),WrappedArray()),(/builds(6)/pull_请求_number,List(ValidationError.expected.jsstring),WrappedArray()),(/builds(7)/pull_请求_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(7)/pull_请求_编号,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(8)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(8)/pull_请求_编号,List(validationarror)(List(List)(ValidationError.jsstring))(error.expected.jsstring)、WrappedArray())、(/builds(9)/pull_请求_标题、List(10)/ValidationError(List(error.expected.jsstring)、WrappedArray())、(/builds(9)/pull_请求_编号、List(ValidationError(List(error.expected.jsstring)、WrappedArray()))、(/builds(10)/pull_请求_标题、List(ValidationError(List(error.expected.jsstring)、WrappedArray())),(/builds(10)/pull_请求编号,列表(ValidationError(List)(error.expected.jsstring),WrappedArray()),(/builds(11)/pull_请求编号,列表(ValidationError(List)(error.expected.jsstring),WrappedArray()),(/builds(12)/pull_请求标题,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(12)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(13)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(13)/pull_请求_编号,List(ValidationError(error.expected.jsstring),WrappedArray()),(/builds(14)/pull_请求_标题,List(ValidationError)(List(List))等等)(error.expected.jsstring),WrappedArray()),(/builds(14)/pull_请求_编号,List(15)/ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(15)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(15)/pull_请求_编号,List(List(error.expected.jsstring),WrappedArray())),(/builds(16)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(17)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(18)/pull_请求标题,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(18)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(19)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(19)/pull_请求_编号,List(ValidationError(error.expected.jsstring),WrappedArray()),(/builds(20)/pull_请求_标题,List(ValidationError)(List(List)(ValidationError.jsstring)))(error.expected.jsstring),WrappedArray()),(/builds(20)/pull_请求_编号,List(22)/pull_请求_标题,List(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(21)/pull_请求_编号,List(ValidationError.expected.jsstring),WrappedArray()),(/builds(22)/pull_请求_标题,List(ValidationError.expected.jsstring,WrappedArray())),(/builds(22)/pull_请求编号,列表(ValidationError(List)(error.expected.jsstring),WrappedArray()),(/builds(23)/pull_请求标题,列表(ValidationError(List)(error.expected.jsstring),WrappedArray()),(/builds(23)/pull_请求编号,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(24)/pull_请求标题,列表(ValidationError(List(error.expected.jsstring),WrappedArray()),(/builds(24)/pull_请求_编号,List(ValidationError(List(error.expected.jsstring),WrappedArray()))
关于问题可能是什么的任何线索?提前感谢!使用play Json如果要序列化的case类没有使用任何自定义类型,您不需要手动编写读卡器或写卡器,则可以使用Json。Writes[t]:
implicit val buildFormat = Json.Reads[Build]
这将自动为您生成读取(您也可以使用Json.Writes[T]或Json.Format[T])。Play足够聪明,可以使用它来反序列化列表[T]另外。使用play Json如果要序列化的case类没有使用任何自定义类型,您不需要手工编写读卡器或写卡器,则可以使用Json。Writes[t]:
implicit val buildFormat = Json.Reads[Build]
这将自动为您生成读取