json - 如何使用json4s从json数组解析和提取信息

标签 json scala json4s

我目前正在尝试使用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的建议工作。

最佳答案

您的代码是正确的,只不过您的JSON只是一个数组,因此是List[User]。有两种方法可以解决此问题,但结果略有不同:

解决方案1 ​​:将json修复为

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

Solution2 :将提取的类型参数更改为
val obj = parse(json).extract[List[User]]

关于json - 如何使用json4s从json数组解析和提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052477/

相关文章:

scala - 如何在 Scala 的 match case 语句中使用 Map 值

scala - 使用json4s提取字符串值

json - 将键值字符串转换为 Scala Map 的方法

javascript - 操作 MongoDB 响应 NodeJS

json - 如何在 fabricjs 中恢复/重用 json 序列化对象?

javascript - 在 Laravel 5.1 中通过 ajax 提交表单

java - Akka 是否有内置的解决方案来从广播路由器收集答案?

arrays - 在 Swift 中读取 JSON 中的嵌套数组和元组

Scala - 从 DSL 的应用方法中省略括号

scala - 如何将 json4s 库添加到 Scala