Play framework 2.3.4使用可变数字键读取JSON

Play framework 2.3.4使用可变数字键读取JSON,json,scala,playframework,Json,Scala,Playframework,我正在使用PlayFramework2.3.4,我正在尝试编写一个简单的隐式读取函数,该函数应该能够在json对象中获取任意数量的键,并生成一系列域对象 例如,JSON可能如下所示: { "key1" : "value1", "key2" : "value2", ... "keyN" : "valueN" } 我有一个域对象,如下所示: case class DomainObject(key: String, value: String) 我想用Play JSON编写一些东西来生成一个Seq

我正在使用PlayFramework2.3.4,我正在尝试编写一个简单的隐式读取函数,该函数应该能够在json对象中获取任意数量的键,并生成一系列域对象

例如,JSON可能如下所示:

{ "key1" : "value1", "key2" : "value2", ... "keyN" : "valueN" }
我有一个域对象,如下所示:

case class DomainObject(key: String, value: String)
我想用Play JSON编写一些东西来生成一个Seq[DomainObject]

因此,在本例中,如果我们只有两个键,我将有两个DomainObject的序列,第一个带有key=“key1”和value=“value1”,第二个带有key“key2”和value=“value2”


感谢您的帮助。

也许有一种方法可以创建一个优秀的writer来完成这项工作,但简单的解决方案是:

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