如何使用scala play将json对象添加到json数组中?

Jam*_*mes 8 json scala playframework

在我的scala代码中,我有一个包含电子邮件数据的json对象

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))
Run Code Online (Sandbox Code Playgroud)

我需要在每个循环期间将emailJson添加到jsonArray

我试过了

jsonArray.+:(emailJson)
Run Code Online (Sandbox Code Playgroud)

jsonArray.append(emailJson)
Run Code Online (Sandbox Code Playgroud)

但得到空阵列

我应该在这里使用jsonObject添加到json数组中

noz*_*iar 8

请记住,这JsArray是不可改变的,所以写作

jsonArray.+:(emailJson)
Run Code Online (Sandbox Code Playgroud)

不会修改jsonArray,它只会创建一个新的json数组,emailJson并在末尾添加.

相反,你需要写一些像:

val newArray = jsonArray +: emailJson
Run Code Online (Sandbox Code Playgroud)

并使用newArray而不是jsonArray之后.

在你的情况下,你说你需要在"每次循环迭代"中添加一个元素.当使用像Scala这样的函数式语言时,您可能应该尝试更多地考虑"映射集合"而不是"循环迭代".例如,您可以写:

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)
Run Code Online (Sandbox Code Playgroud)