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

时间:2014-10-06 08:40:42

标签: json scala playframework

我正在使用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”

感谢您的帮助。

1 个答案:

答案 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。