1

从 Web 服务响应读取 JSON 结果后:

val jsonResult: JsValue = Json.parse(response.body)

包含以下内容:

{
    result:  [
    ["Name 1", "Row1 Val1", "Row1 Val2"],
    ["Name 2", "Row2 Val1", "Row2 Val2"]
             ]
 }

如何有效地将 JSON 中结果数组的内容与列表(或类似内容)映射,例如:

val keys = List("Name", "Val1", "Val2")

获取哈希图数组?

4

1 回答 1

2

像这样的东西?此解决方案是功能性的,并且“正确”处理无/失败案例(通过返回无)

val j = JSON.parseFull( json ).asInstanceOf[ Option[ Map[ String, List[ List[ String ] ] ] ] ]

val res = j.map { m ⇒
    val r = m get "result"
    r.map { ll ⇒
        ll.foldRight( List(): List[ Map[ String, String ] ] ) { ( l, acc ) ⇒
            Map( ( "Name" -> l( 0 ) ), ( "Val1" -> l( 1 ) ), ( "Val2" -> l( 2 ) ) ) :: acc
        }
    }.getOrElse(None) 
}.getOrElse(None) 
  • 注意 1:我必须在 JSON 字符串中加上双引号result才能使 JSON 解析器工作
  • 注2:使用更多“单子”糖(例如用于理解或使用应用函子)代码可能看起来更好
于 2013-01-15T15:25:17.730 回答