【问题标题】:How to add a json object in to a json array using scala play?如何使用 scala play 将 json 对象添加到 json 数组中?
【发布时间】:2014-05-20 07:34:31
【问题描述】:

在我的 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数组中

【问题讨论】:

    标签: json scala playframework


    【解决方案1】:

    记住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)
    

    【讨论】:

    • 感谢您的宝贵回答
    猜你喜欢
    • 2016-04-20
    • 2011-11-21
    • 2020-09-02
    • 2020-02-22
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多