2014-11-21 16 views
9

Attualmente sto cercando di estrarre le informazioni da un array json usando json4s (scala).Come analizzare ed estrarre informazioni da json array usando json4s

Un dato esempio è il seguente:

val json = """ 
    [ 
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]}, 
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]} 
    ] 
""" 

E il mio codice è il seguente:

case class User(name: String, emails: List[String]) 
case class UserList(users: List[User]) { 
    override def toString(): String = { 
    this.users.foldLeft("")((a, b) => a + b.toString) 
    } 
} 

val obj = parse(json).extract[UserList] 
printf("type: %s\n", obj.getClass) 
printf("users: %s\n", obj.users.toString) 

L'uscita si rivela essere:

type: class UserList 
users: List() 

Sembra che il i dati non sono stati recuperati correttamente. C'è qualche problema con il mio codice?

AGGIORNAMENTO: Funziona secondo il suggerimento di @Kulu Limpa.

risposta

18

Il tuo codice è corretto tranne che il tuo JSON è semplicemente un array, quindi un List[User]. Ci sono due modi per risolvere questo problema, con un risultato leggermente diverso:

Soluzione 1: Fissate la vostra JSON per

{"users": 
    [ 
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]}, 
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]} 
    ] 
} 

Solution2: Modificare il parametro tipo di estratto di

val obj = parse(json).extract[List[User]] 
+2

Lei signore è un gentiluomo. Grazie! –

Problemi correlati