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

3

我有一个字符串,它是两个对象的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个回答

2

我有点生疏,请见谅。也许其他的程序员可以来帮我整理一下。

这个解决方案假设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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接