2014-05-20 12 views
6

Nel mio codice Scala Ho un oggetto JSON consistente dati e-mailCome aggiungere un oggetto JSON a un array JSON usando scala play?

val messages = inboxEmail.getMessages(); 
var jsonArray = new JsArray 
for(inboxMessage <- messages) 
{ 
    ... 
    ... 
    val emailJson = Json.obj("fromAddress" -> fromAddressJsonList, "toAddress" -> toAddressJsonList, "ccAddress" -> ccAddressJsonList, "bccAddress" -> bccAddressJsonList, "subject" -> emailMessage.getSubject().toString(), "message" -> Json.toJson(emailMessageBody)) 

ho bisogno di aggiungere emailJson al jsonArray durante ogni ciclo

ho provato

jsonArray.+:(emailJson) 

e

jsonArray.append(emailJson) 

ma ricevendo array vuoto

cosa devo usare qui per aggiungere JsonObject nella matrice JSON

risposta

7

Ricordate che JsArray è immutabile, in modo da scrivere

jsonArray.+:(emailJson) 

non modificherà jsonArray, sarà solo creare un nuovo array JSON con emailJson aggiunto alla fine.

Invece si avrebbe bisogno di scrivere qualcosa di simile:

val newArray = jsonArray +: emailJson 

e utilizzare newArray invece di jsonArray dopo.

Nel tuo caso hai detto che è necessario aggiungere un elemento "ad ogni iterazione del ciclo". Quando usi un linguaggio funzionale come Scala, dovresti probabilmente cercare di pensare di più in termini di "mappatura su collezioni" piuttosto che "iterare in un ciclo". Ad esempio potresti scrivere:

val values = messages map {inboxMessage => 
    ... 
    ... 
    Json.obj("fromAddress" -> fromAddressJsonList, "toAddress" -> toAddressJsonList, "ccAddress" -> ccAddressJsonList, "bccAddress" -> bccAddressJsonList, "subject" -> emailMessage.getSubject().toString(), "message" -> Json.toJson(emailMessageBody)) 
} 
val newArray = objects ++ JsArray(values) 
+0

Grazie per la tua preziosa risposta – James

Problemi correlati