Web アプリケーションを Play 2.0.4 から Play 2.1-RC2 に移行しようとしています。
次のような不明なキー ( key1
、key2
)のリストを含む JSON データがあります。
{description: "Blah",
tags: [
key1: ["value1", "value2"],
key2: ["value3"]
]
}
JSON からのデータをメタタグのリストに保存したいと考えています。Play 2.0.4 では、次のようなものを使用してtags
-listを読み取りました。
def readMetatags(meta: JsObject): List[Metatag] =
meta.keys.toList.map(x => Metatag(x, (meta \ x).as[List[String]])
ここで、新しい Play 2.1-JSON-API (プロトタイプ) を使用したいと思います。
import play.api.libs.json._
import play.api.libs.functional.syntax._
object Metatags {
implicit val metatagsRead: Read[Metatags] = (
(JsPath \ "description").read[String] and
(JsPath \ "tags").read[List[Metatag]]
)(Metatags.apply _, unlift(Metatags.unapply _))
implicit val metatagRead: Read[Metatag] = (
JsPath().key. ?? read[String] and // ?!? read key
JsPath().values. ?? read[List[String]] // ?!? read value list
)(Metatag.apply _, unlift(Metatag.unapply _))
}
case class Metatags(description: String, tags: List[Metatag])
case class Metatag(key: String, data: List[String])
JSON からキーを読み取るにはどうすればよいですか?