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]. 有两种方法可以解决此问题,但结果略有不同:

解决方案 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 回答