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

时间:2014-05-20 07:34:31

标签: 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))

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

我试过

jsonArray.+:(emailJson)

jsonArray.append(emailJson)

但获得空数组

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

1 个答案:

答案 0 :(得分:8)

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

jsonArray.+:(emailJson)

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

相反,你需要写一些类似的东西:

val newArray = jsonArray +: emailJson

然后使用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)