如何使用 Scala 迭代 JSON 文件的每个元素



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))

这个答案的学分

最新更新