2013-10-03 27 views
0

無值有一些代碼,建立Scala中的一個JSON對象在結果和年齡都包裹在一個選項Playframework背景我如何處理JSON

def toJson(): JsObject = Json.obj(
    "status" -> JsString(result.getOrElse("fail")), 
    "age" -> JsNumber(age.getOrElse(0)) 
) 

。年齡線中的getOrElse部分表示年齡不可用。這就是我想要解決的問題。

輸出的結果是:

{ 
status: "fail", 
age: 0 
} 

問題答:在這個例子中,年齡是沒有那麼getOrElse返回0,這必須由客戶端的一些神奇的數字有特殊的含義進行解釋。我想返回類似None的內容,但play.api.libs.json.JsNumber需要一個scala.BigDecimal。

有沒有辦法解決這個問題?

問題B:審訊的將是離開了的情況下,年齡是不可用,所以結果看起來像一個解決方案:圍繞

{ 
status: "fail" 
} 

的Json.obj內我不能亂(a,b,...)構造...

那麼代碼是如何實現這樣的呢?

+0

請問該玩什麼版本? –

+0

@JulienLafont:玩2.1.3 – raoulsson

回答

2

看看這樣的事情對你的作品:

val fields:Seq[Option[(String,JsValueWrapper)]] = Seq(
    result.map(s => ("status", JsString(s))), 
    age.map(i => ("age", JsNumber(new BigDecimal(i)))) 
) 
val finalFields = fields.flatten 

Json.obj(finalFields:_*) 

當序列被夷爲平地,在它的無類型應該被刪除,因此無法得到的JsObject的一部分。