10

現在、json4s (scala) を使用して json 配列から情報を抽出しようとしています。

データの例は次のとおりです。

val json = """
  [
    {"name": "Foo", "emails": ["Foo@gmail.com", "foo2@gmail.com"]},
    {"name": "Bar", "emails": ["Bar@gmail.com", "bar@gmail.com"]}
  ]
"""

私のコードは次のとおりです。

case class User(name: String, emails: List[String])
case class UserList(users: List[User]) {
  override def toString(): String = {
    this.users.foldLeft("")((a, b) => a + b.toString)
  }
}

val obj = parse(json).extract[UserList]
printf("type: %s\n", obj.getClass)
printf("users: %s\n", obj.users.toString)

出力は次のようになります。

type: class UserList
users: List()

データが正しく取得されていないようです。私のコードに問題はありますか?

更新: @Kulu Limpa の提案に従って動作します。

4

1 に答える 1

23

JSONが単なる配列であることを除いて、コードは正しいため、List[User]. これを修正するには 2 つの方法がありますが、結果はわずかに異なります。

解決策 1 : json を次のように修正します。

{"users": 
  [
    {"name": "Foo", "emails": ["Foo@gmail.com", "foo2@gmail.com"]},
    {"name": "Bar", "emails": ["Bar@gmail.com", "bar@gmail.com"]}
  ]
}

解決策 2 : 抽出のタイプ パラメータを次のように変更します。

val obj = parse(json).extract[List[User]]
于 2014-11-21T01:50:13.713 に答える