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 中弄清楚。

4

1 回答 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
}
于 2013-07-16T00:32:12.180 回答