2016-11-03 2 views
1

У меня есть большой кусок Json, из которых я только заботиться о небольшом подмножестве например:Play ScalaJSON Считывает ошибка несоответствия [T] синтаксический тип

{ 
    "request": { 
    "c": { 
     "code": "AA", 
     "fsCode": "AA" 
    }, 
    "codeType": {}, 
    "number": { 
     "requested": "100", 
    }, 
    "scheduled": [ 
    { 
     "code": "BB", 
     "number": "100", 
     "classes": [ 
     "F", 
     "Y" 
     ] 
    }] 
} 

Я просто хочу, чтобы извлечь code и number переменные. Я попытался с помощью Reads следующим образом:

case class TheResult(result: (String, String)) 

implicit val theScheduledReads: Reads[TheResult] = (
    (__ \ "code").read[String] and 
     (__ \ "number").read[String] tupled) map TheScheduledFlight.apply _ 

case class ResultList(addr: List[TheResult]) 

implicit val resultReads: Reads[ResultList] = 
    (__ \ "scheduled").read(List[TheResult](theScheduledReads)) map ResultList _ 

, а затем, чтобы получить доступ к результату:

response.json.validate[List[ResultList]]

Однако, он бросает эту ошибку:

type mismatch; found : play.api.libs.json.Reads[details.client.TheResult] required: details.client. TheResult (__ \ "address").read(List[TheResult](resultReads)) map (TheResult.apply _)

Любые идеи что я делаю неправильно?

ответ

1

Исправлено несколько проблем в коде. Посмотрите

Самое главное read(List[TheResult](theScheduledReads)) не имеет смысла. Это должно быть read[List[TheResult]]

Заменить TheScheduledFlight.apply с TheResult.apply _

case class TheResult(result: (String, String)) 

implicit val theScheduledReads: Reads[TheResult] = (
    (__ \ "code").read[String] and 
    (__ \ "number").read[String] tupled) map TheResult.apply _ //problem fixed here 

case class ResultList(addr: List[TheResult]) 

implicit val resultReads: Reads[ResultList] = 
    (__ \ "scheduled").read[List[TheResult]] map ResultList.apply _ //problem fixed here 
Смежные вопросы