ここで「スタイル」または「効果的なスカラ」タイプの質問があります。Json in Play フレームワークにシリアル化する必要がある「FeatureCheck」クラスがあります。
case class FeatureCheck(val result: Option[Boolean], val missing: Option[Array[String]], val error: Option[String])
独自の「書き込み」を使用してシリアル化していますが、コードは Java コードによく似ています。チェックオブジェクトの各オプションが定義されている場合にのみシリアル化したいと思います (最終オブジェクトには空の値があってはなりません)。
def writes(check: FeatureCheck): JsValue = {
val builder = Seq.newBuilder[(String, JsValue)]
if (check.error.isDefined) {
builder += "error" -> JsString(check.error.get)
}
if (check.missing.isDefined) {
builder += "missing" -> Json.toJson(check.missing.get)
}
if (check.result.isDefined) {
builder += "result" -> JsBoolean(check.result.get)
}
JsObject(builder.result)
}
そのため、これらの醜いif-thenを使用せずに、またはシーケンスのビルダーを削除することさえせずにこれを行う方法があるかどうか疑問に思っていました.
助けやコメントをありがとう。
説明:
result = true だけを送信したいとしましょう。結果の Json は次のようになります。
{"result":true}
ではない
{
"result": true,
"error": null,
"missing": []
}