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数组中
请记住,这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)