如何使用Play API反序列化JSON数组

时间:2013-07-15 23:20:48

标签: json scala playframework deserialization

我有一个字符串,它是两个对象的Json数组。

> val ss = """[ {"key1" :"value1"}, {"key2":"value2"}]"""

我想使用Play Json库对其进行反序列化,并从键值到对象创建一个映射。

def deserializeJsonArray(ss:String):Map[String, JsValue] = ???
// Returns Map("value1" -> {"key1" :"value1"}, "value2" -> {"key2" :"value2"})

如何编写deserializeJsonArray函数?这似乎应该很容易,但我无法从Play文档或REPL中找到它。

1 个答案:

答案 0 :(得分:2)

我有点生疏,所以请原谅这个烂摊子。也许另一个overflower可以进来,为我清理它。

此解决方案假定JSON是一个对象数组,每个对象只包含一个键值对。我强烈建议使用一些错误处理和/或模式匹配来验证解析的JSON字符串。

def deserializeJsonArray(ss: String): Map[String, JsValue] = {

  val jsObjectSeq: Seq[JsObject] = Json.parse(ss).as[Seq[JsObject]]

  val jsValueSeq: Seq[JsValue] = Json.parse(ss).as[Seq[JsValue]]

  val keys: Seq[String] = jsObjectSeq.map(json => json.keys.head)

  (keys zip jsValueSeq).toMap
}