Playframework コンテキストで Scala に JSON オブジェクトを構築するコードがいくつかあります。
def toJson(): JsObject = Json.obj(
"status" -> JsString(result.getOrElse("fail")),
"age" -> JsNumber(age.getOrElse(0))
)
result と age は Option でラップされます。年齢行の getOrElse 部分は、年齢が利用できないことを示しています。それが私が回避したいことです。
結果の出力は次のとおりです。
{
status: "fail",
age: 0
}
質問 A:この例では、age が None であるため、getOrElse は 0 を返します。これは、クライアントが特別な意味を持つマジック ナンバーとして解釈する必要があります。None のようなものを返したいのですが、play.api.libs.json.JsNumber は scala.BigDecimal を期待しています。
どういうわけかこれを回避する方法はありますか?
質問 B:質問 A の解決策は、年齢が利用できない場合に備えて年齢を除外することです。結果は次のようになります。
{
status: "fail"
}
Json.obj(a, b, ...) コンストラクト内をいじることはできません...
では、このようなことを実現するためのコードはどのようになるでしょうか?