JSON文件: 需要使用scala迭代每个元素。在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))
答案 0 :(得分:0)
假设您正在使用Play框架,您可以使用简单和递归路径遍历Scala中的JSON对象
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"\0\"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])
在https://www.playframework.com/documentation/2.6.x/ScalaJson使用Play框架在Scala中遍历JSON元素的大量信息
这会回答你的问题吗?
答案 1 :(得分:0)
不确定此解决方案是否符合您的要求。
用于提取的一些具体类
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))
对此answer
的信用