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
オブジェクトに頼らずに、この平坦化と非平坦化を行う正しい方法はありますか? 私の実際のデータ構造は非常に大きいので(複雑すぎませんが)、簡潔さは良いです。