У меня есть код, который создает объект JSON в Scala в контексте Playframework.
def toJson(): JsObject = Json.obj(
"status" -> JsString(result.getOrElse("fail")),
"age" -> JsNumber(age.getOrElse(0))
)
Где результат и возраст заключены в Option. Часть getOrElse в строке возраста указывает, что возраст недоступен. Это то, что я хотел бы обойти.
В результате получается:
{
status: "fail",
age: 0
}
Вопрос A: В этом примере возраст равен None, поэтому getOrElse возвращает 0, который должен интерпретироваться клиентами как некое магическое число со специальным значением. Я хотел бы вернуть что-то вроде None, но play.api.libs.json.JsNumber ожидает scala.BigDecimal.
Есть ли способ обойти это?
Вопрос Б. Решением вопроса А было бы не указывать возраст, если он недоступен, поэтому результат будет выглядеть так:
{
status: "fail"
}
Я не могу возиться с конструкцией Json.obj(a, b,...)...
Итак, как должен выглядеть код для достижения чего-то подобного?