我在这里有一个“风格”或“有效 scala”类型的问题:我有一个“FeatureCheck”类,我需要将其序列化为 Json in Play 框架。
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": []
}