我正在使用Play Framework 2.3.4,我正在尝试编写一个简单的隐式Reads函数,它应该能够在json对象中获取任意数量的键并生成一个Seq的域对象。
例如,JSON可能如下所示:
{ "key1" : "value1", "key2" : "value2", ... "keyN" : "valueN" }
我有一个像这样的域名对象:
case class DomainObject(key: String, value: String)
我想用Play JSON写一些东西来生成Seq [DomainObject]。
所以在这种情况下,如果我们只有两个键,我有两个DomainObjects的Seq,第一个用key =“key1”和value =“value1”,第二个用键“key2”和值=“value2”
感谢您的帮助。
答案 0 :(得分:3)
也许有一种方法可以创建出色的编写器,但是简单的解决方案是:
scala> val myJson = Json.parse("""{ "key1" : "value1", "key2" : "value2", "keyN" : "valueN" }""")
myJson: play.api.libs.json.JsValue = {"key1":"value1","key2":"value2","keyN":"valueN"}
scala> myJson.as[Map[String,String]] map {case (key, value) => DomainObject(key, value)}
res8: scala.collection.immutable.Iterable[DomainObject] = List(DomainObject(key1,value1), DomainObject(key2,value2), DomainObject(keyN,valueN))
不是构建一些复杂的编写器,而是需要将它转换为Map [String,String](为此你有开箱即用的编写器),然后将每个键值对映射到DomainObject。