JSON 文件:需要使用scala.read迭代每个元素,并在Scala中读取JSON文件并迭代每个元素并将其添加到特定列表中。
输入:
{"details": [{"Level": "1", "member": "age", "claim": "age"}, {"Level": "2", "member": "dob", "claim": "dob"}, {"Level": "2", "member": "name", "claim": "name"}]}
output:
Memberlist=list(list(age),list(dob),list(name))
Claimlist=list(list(age),list(dob),list(name))
简单和递归路径在 Scala 中遍历 JSON 对象,假设您使用的是 Play 框架
val jsonDetails:JsValue = Json.parse("""
{"details":
[{"Level": "1", "member":"age", "claim":"age"},
{"Level": "2", "member": "dob", "claim": "dob2"},
{"Level": "2", "member":"name1", "claim":"name"}
]}
""")
var pathToFirstLevel = (jsonDetails"details" "Level")
var allIstancesOfMember = (jsonDetails\"member")
会回来
res1: play.api.libs.json.JsLookupResult = JsDefined("1")
res2: Seq[play.api.libs.json.JsValue] = List("age", "dob", "name1")
你可以获取你要查找的数据并填充你的列表,但你需要将 JsValues 转换为 Scala 可以使用的值(使用 .as[T] 而不是 asInstanceOf[T](
您也可以使用地图
var allIstancesOfMember =(jsonDetails\"member").map(_.as[String])
有大量关于在Scala中使用Play框架遍历JSON元素的信息,请访问 https://www.playframework.com/documentation/2.6.x/ScalaJson
这回答了你的问题吗?
不确定此解决方案是否适合您的要求。
一些用于提取的混凝土类
class CC[T] { def unapply(a:Any):Option[T] = Some(a.asInstanceOf[T]) }
object M extends CC[Map[String, Any]]
object L extends CC[List[Any]]
object S extends CC[String]
ListBuffer
输出。
val memberList = ListBuffer.empty[Any]
val claimList = ListBuffer.empty[Any]
for
理解来迭代细节列表并提取每个细节。
for {
Some(M(map)) <- List(JSON.parseFull(s))
L(details) = map("details")
M(language) <- details
//S(level) = language("Level") //Not so sure how to use this variable
S(member) = language("member")
S(claim) = language("claim")
} yield {
memberList += List(member) //List is used to match your output.
claimList += List(claim) //List is used to match your output.
}
输出
println(memberList)
//ListBuffer(List(m_age), List(m_dob), List(m_name))
println(claimList)
//ListBuffer(List(c_age), List(c_dob), List(c_name))
这个答案的学分