我有一个大的json对象:myNestedObject
{
"size": 2,
"values": [{
"name": "mullock",
"upstatus": "Green",
"details": {
"key": "rupture farms",
"server": "mudos",
"owner": "magog_cartel",
"type": "NORMAL",
"links": {
"self": [{
"address": "https://mudos.com:port/access"
}]
}
}
},{
"name": "tassadar",
"upstatus": "Orange",
"details": {
"key": "archon",
"server": "protoss",
"owner": "aspp67",
"type": "NORMAL",
"links": {
"self": [{
"address": "https://aiur.com:port/access"
}]
}
}
}],
"limit": 100
}
这是案例类如下所示:
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
case class Result(size: Int, limit: Int, values: Seq[Values])
case class Values(name: String, upstatus: String, details: ValuesDetails)
case class ValuesDetails(key: String, server: String, owner: String, `type`: String, links: ValuesDetailsLinks)
case class ValuesDetailsLinks(self: Seq[ValuesDetailsLinksAddress])
case class ValuesDetailsLinksAddress(address: String)
object Foo {
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
def test(Json): Unit
val return = mapper.readValue[Result](Json)
myNestedObject.size
是一个给出数组长度的字段
myNestedObject.values(I)
尝试将以下值提取到List [String]
中myNestedObject.values(ⅰ)。名称
我一直在使用原始for循环来提取并且代码有效。
val selectNames: List[String] = (
for (i <- 0 to myNestedObject.size-1 toList) yield
myNestedObject.values(i).name
)
重构我的代码并尝试使用.map(不成功)做同样的事情,两次尝试:
myNestedObject.map(_ => values(i).name)
myNestedObject.(values(i).name).asInstanceOfList
免责声明:我是一个完整的新手。
SOLUTION:可以在不指定索引
的情况下访问值列表myNestedObject.values.map(_.name)
答案 0 :(得分:3)
我认为你可以这样做:
myNestedObject.values.map(_.name)
答案 1 :(得分:1)
Dylan Grald的回答是正确的,但你也可以使用同等的理解
for (x <- myNestedObject.values)
yield (x.name)
这使用map
方法去了版本。对于这样的简单情况,我更喜欢直接调用map
方法,但我想我会提到for
版本作为替代方案。