【发布时间】:2019-11-09 19:12:42
【问题描述】:
我正在尝试使用 Play 库为某些字段解析具有空值的 json。有一个表示数据的案例类:
case class Id(value: Int) extends AnyVal
case class Name(value: String) extends AnyVal
case class Number(value: Int) extends AnyVal
case class Data(id: Option[Id], name: Option[Name], number: Option[Number])
以下是解析当前的工作方式:
def parse(jsValue: JsValue): Try[Seq[Data]] = Try {
jsValue.as[JsArray].value
.flatMap { record =>
val id = Id((record \ "id").as[Int])
val name = Name((record \ "name").as[String])
val number = Number((record \ "number").as[Int])
Some(Data(Some(id), Some(name), Some(number)))
}
}
用特定数据类型解析不处理空情况,所以这个实现返回:
Failure(play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsstring),WrappedArray()))))))
对于这样的输入数据:
{
"id": 1248,
"default": false,
"name": null,
"number": 2
}
我想要这样的东西:Seq(Data(Some(Id(1248)), None, Some(Number(2))))
我要将数据写入数据库,所以我不介意为这些字段写入一些空值。
如何处理已解析 json 中字段的空值?
【问题讨论】:
-
您的 JSON 在最后一个键/值对之后是否包含尾随逗号?
-
不,它没有。这是偶然的
标签: scala playframework play-json