如何在Scala Play中将JSON对象添加到JSON数组中?

8
在我的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个回答

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)

非常感谢您宝贵的回答。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接