2017-08-24 6 views
1

Ich versuche akka-http-spray-json 10.0.9Spray-Json. Wie kommt man Liste der Objekte von json

Mein Modell zu verwenden:

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

I JSON-String jsonStr mit Liste der Personen und versuchen, es zu analysieren:

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

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

Fehler:

Object expected in field 'id'


Wahrscheinlich brauche ich implicit object extends RootJsonFormat[List[Person]] zu erstellen und read und write Methoden außer Kraft setzen.

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. Sorry für mein Englisch, es ist nicht meine Muttersprache.

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} ] 

Antwort

1

ich perfekt zu erwarten Ergebnisse anzeigen mit:

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

Ich habe 'nicht gefunden Typ CustomCollectionFormats' – Oleg

+0

Leider .. das kommt aus dem eigenen lib .. –

+0

Sorry für die Änderungen und irrelevante Kommentare .. meine Scala repl Namespace war voll von Links .. –