我有一个字符串,它是两个对象的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中找到它。
答案 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
}