2017-08-24 2 views
1

Je suis en train d'utiliser akka-http-spray-json 10.0.9spray-json. Comment obtenir la liste des objets de JSON

Mon modèle:

case class Person(id: Long, name: String, age: Int) 

Je reçois chaîne JSON jsonStr avec la liste des personnes et essayer de l'analyser:

implicit val personFormat: RootJsonFormat[Person] = jsonFormat3(Person) 

val json = jsonStr.parseJson 
val persons = json.convertTo[Seq[Person]] 

Erreur:

Object expected in field 'id'


Probablement je dois créer implicit object extends RootJsonFormat[List[Person]] et passer outre read et write méthodes.

implicit object personsListFormat extends RootJsonFormat[List[Person]] { 
    override def write(persons: List[Person]) = ??? 

    override def read(json: JsValue) = { 
     // Maybe something like 
     // json.map(_.convertTo[Person]) 
     // But there is no map or similar method :(
    } 
} 

P.S. Désolé pour mon anglais, ce n'est pas mon pays natal.

UPD
jsonStr:

[ {"id":6,"name":"Martin Ordersky","age":50}, {"id":8,"name":"Linus Torwalds","age":43}, {"id":9,"name":"James Gosling","age":45}, {"id":10,"name":"Bjarne Stroustrup","age":59} ] 

Répondre

1

je suis parfaitement avec les résultats attendus:

import spray.json._ 

object MyJsonProtocol extends DefaultJsonProtocol { 
    implicit val personFormat: JsonFormat[Person] = jsonFormat3(Person) 
} 

import MyJsonProtocol._ 

val jsonStr = """[{"id":1,"name":"john","age":40}]""" 
val json = jsonStr.parseJson 
val persons = json.convertTo[List[Person]] 
persons.foreach(println) 
+0

Je me suis trouvé 'pas le type CustomCollectionFormats' – Oleg

+0

Désolé .. cela vient de notre propre lib .. –

+0

Désolé pour les modifications et les commentaires non pertinents .. mon espace de noms repl scala était plein de gauche overs .. –