我在 Play 2.1 Scala 中为某些 JSON 编写 Format 对象时遇到了一些麻烦。我的(大大简化的)JSON 看起来像这样:
{
"id": "id-1",
"data": {
"foo": "teststr1",
"bar": "teststr2"
}
}
我想将其序列化/反序列化为稍微简单的扁平格式:
case class TestData(id: String, foo: String, bar: String)
我最初的尝试是这样的:
implicit val testCaseFormat: Format[TestData] = (
(__ \ "id").format[String] and
(__ \ "data" \ "foo").format[String] and
(__ \ "data" \ "bar").format[String]
)(TestData.apply, unlift(TestData.unapply))
这在读取bar
数据时工作正常,但在输出 JSON 中仅写入最后一个“数据”值 ( ) 时,可能是因为data
每个后续值都覆盖了该对象:
{
"id" : "id-1",
"data":{
"bar":"teststr2"
}
}
有没有正确的方法来进行这种扁平化和非扁平化,而不诉诸分离Reads
和Writes
对象?我的实际数据结构非常大(虽然不太复杂),所以简洁性很好。