在我的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数组
答案 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)