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

このようなもの ?このソリューションは機能的であり、None / Failureケースを「適切に」処理します(Noneを返すことにより)

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) 
  • result注1: JSONパーサーを機能させるには、JSON文字列に二重引用符を付ける必要がありました
  • 注2:内包表記などの「モナディック」シュガーを使用したり、アプリケーションファンクターを使用したりすると、コードの見栄えが良くなる可能性があります。
于 2013-01-15T15:25:17.730 に答える