2016-02-03 50 views
1

有沒有辦法循環每個類的成員變量?這是微不足道的列表和數組,但我必須構建每個JSON字段映射的情況下,類成員變量來使用Play框架的讀/驗證API斯卡拉foreach成員變量

+0

你能澄清嗎?你的意思是迭代類實例中的每個屬性? – 7zark7

+0

是的,這就是我的意思 – kliew

+0

從你的問題我有一種感覺,你做錯了什麼。你可以詳細說明你正在嘗試做什麼,舉個例子吧? –

回答

2

你的意思是這樣:

case class SomeClass(a: Int, b: Int) 
SomeClass(1,2).productIterator.foreach{ a => println(a)} 

這會給你輸出:1 2

或者如果你想從json構造一個對象。您可以定義讀取你的情況類deserialises JSON給你的對象:

override def reads(json: JsValue): JsResult[SomeClass] = JsSuccess(SomeClass(
    (json \ "a").as[Int], 
    (json \ "b").as[Int] 
) 
) 

然後使用deserialisation:

val json = Json.obj() //Your json 
json.validate[SomeClass] 

json.fold(
    errors => { 
    Json.obj("status" -> "Not OK", "message" -> JsError.toJson(errors)) 
    }, 
    preset => { 
    Json.obj("status" -> "OK") 
    } 
) 
+0

謝謝,我已經做了一個類對象的轉換。 productIterator部分就是我所需要的。 – kliew

1

如果你想比較Json並獲得差異,可能會更好地利用JsObject方法?例如fieldSet將所有字段作爲一組返回。您可以在前一個和當前字段集上使用diff來獲取更改的字段。這是快速解決方案,沒有任何特定的類。