【发布时间】:2018-09-11 03:12:49
【问题描述】:
我正在尝试读取 json 文件以计算 scala 中的一些指标。我设法阅读了该文件并执行了一些外部过滤器,但我无法理解如何过滤嵌套列表和映射。
这是一个示例代码(真实的json更长):
val rawData = """[
{
"technology": "C",
"users": [
{
"rating": 5,
"completed": false,
"user": {
"id": 11111,
"paid": true
}
},
{
"rating": 4,
"completed": false,
"user": {
"id": 22222,
"paid": false
}
}
],
"title": "CS50"
},
{
"technology": "C++",
"users": [
{
"rating": 3,
"completed": true,
"user": {
"id": 33333,
"paid": false
}
},
{
"rating": 5,
"completed": true,
"user": {
"id": 44444,
"paid": false
}
}
],
"title": "Introduction to C++"
},
{
"technology": "Haskell",
"users": [
{
"rating": 5,
"completed": false,
"user": {
"id": 55555,
"paid": false
}
},
{
"rating": null,
"completed": true,
"user": {
"id": 66666,
"paid": false
}
}
],
"title": "Course on Haskell"
}
]"""
val data = rawData.toString.split("\n").toSeq.map(_.trim).filter(_ != "").mkString("")
我设法得到一个包含 3 个标题的列表:
import scala.util.parsing.json._
val parsedData = JSON.parseFull(data)
val listTitles = parsedData.get.asInstanceOf[List[Map[String, Any]]].map( { case e: Map[String, Any] => e("title").toString } )
这是我的 3 个问题:
- 这是获取 3 个标题列表的好方法吗?
- 如何获取包含每个付费用户数量的列表 后三个标题?
- 如何获取包含拥有用户数量的列表 完成后 3 个标题的课程?
提前感谢您的帮助
【问题讨论】:
-
您不应再使用 Scala 的 json 解析器。有更好的替代品,例如circe.github.io/circe。如果您仍然想走石路,请看这里:stackoverflow.com/a/4186090/4432837
标签: json scala dictionary filter