簡體   English   中英

Scala play-json-不解析/反序列化為單參數案例類

[英]Scala play-json - doesn't parse/deserialize to single argument case class

在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,
             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庫定義了以下Reads:

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(List((// builds(0)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(0)/ pull_request_number,List(ValidationError(List(error。 Expected.jsstring),WrappedArray()))),(/ builds(1)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(1)/ pull_request_number, List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(2)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),( / builds(2)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))))((/builds(3)/pull_request_title,List(ValidationError(List(error.expected.jsstring), WrappedArray()))),(/ builds(3)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(4)/ pull_request_title,List(ValidationError(List) (error.expected.jsstring),WrappedArray()))),(/builds(4)/pull_request_number,List(ValidationError(List(error.expected.j sstring),WrappedArray())))(/ builds(5)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(5)/ pull_request_number,List( ValidationError(List(error.expected.jsstring),WrappedArray()))))((/ builds(6)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds (7)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(7)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray( ))))),(/ builds(8)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(8)/ pull_request_number,List(ValidationError(List(error .expected.jsstring),WrappedArray()))),(/ builds(9)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(9)/ pull_request_number ,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(10)/ pull_request_title,List(ValidationError(List( error.expected.jsstring),WrappedArray()))),(/ builds(10)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(11)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))))(/ builds(12)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))) ,(/ builds(12)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/builds(13)/pull_request_title,List(ValidationError(List(error.expected.jsstring ),WrappedArray()))),(/ builds(13)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(14)/ pull_request_title,List(ValidationError (List(error.expected.jsstring),WrappedArray()))))((/ builds(14)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds( 15)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(15)/ pull_request_number, List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(16)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))))( / builds(17)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))))(//builds(18)/pull_request_title,List(ValidationError(List(error.expected.jsstring), WrappedArray()))),(/ builds(18)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(19)/ pull_request_title,List(ValidationError(List) (error.expected.jsstring),WrappedArray()))))((/ builds(19)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(20) / pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(20)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())) ),(/ builds(21)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ buil ds(22)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))))((/builds(22)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray ()))),(/ builds(23)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray())))),(/ builds(23)/ pull_request_number,List(ValidationError(List( error.expected.jsstring),WrappedArray()))))(/ builds(24)/ pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/ builds(24)/ pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))))

關於問題可能有什么線索? 提前致謝!

如果您要序列化的case類沒有使用任何不需要您自己編寫讀者或作家的自定義類型,則使用play Json可以使用Json.Writes [T]:

implicit val buildFormat = Json.Reads[Build]

這將自動為您生成讀取(您也可以使用Json.Writes [T]或Json.Format [T])。 Play足夠聰明,可以使用它來反序列化List [T]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM