2014-05-20 53 views
6

Trong mã scala của tôi tôi có một đối tượng json gồm dữ liệu emailLàm thế nào để thêm một đối tượng json vào một mảng json bằng cách sử dụng scala play?

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

tôi cần phải thêm emailJson đến jsonArray trong mỗi vòng lặp

tôi đã cố gắng

jsonArray.+:(emailJson) 

jsonArray.append(emailJson) 

nhưng nhận mảng trống

gì tôi nên sử dụng ở đây để thêm JSONObject vào mảng json

Trả lời

7

Hãy nhớ rằng JsArray là không thay đổi, vì vậy văn bản

jsonArray.+:(emailJson) 

sẽ không sửa đổi jsonArray, nó sẽ chỉ tạo ra một mảng json mới với emailJson nối vào cuối.

Thay vào đó bạn sẽ cần phải viết một cái gì đó như:

val newArray = jsonArray +: emailJson 

và sử dụng newArray thay vì jsonArray sau đó.

Trong trường hợp của bạn, bạn đã nói bạn cần phải thêm phần tử "tại mỗi lần lặp vòng lặp". Khi sử dụng một ngôn ngữ chức năng như Scala, bạn có lẽ nên cố gắng suy nghĩ nhiều hơn về "lập bản đồ qua các bộ sưu tập" thay vì "lặp trong một vòng lặp". Ví dụ: bạn có thể viết:

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) 
+0

Cảm ơn câu trả lời quý giá của bạn – James

Các vấn đề liên quan