2016-11-03 1 views
1

J'ai un gros morceau de JSON, dont je me soucie seulement un petit sous-ensemble par exemple:Lecture ScalaJSON Reads erreur d'incompatibilité de type d'analyse syntaxique [T]

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

Je veux juste extraire les variables code et number. Je l'ai essayé d'utiliser Reads comme suit:

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 _ 

et ceci pour accéder au résultat:

response.json.validate[List[ResultList]]

Cependant, il jette cette erreur:

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

Toutes les idées ce que je fais mal?

Répondre

1

Correction de plusieurs problèmes dans le code. Jetez un oeil

Le plus important est read(List[TheResult](theScheduledReads)) n'a aucun sens. Il devrait être read[List[TheResult]]

Remplacer TheScheduledFlight.apply avec 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