Jackson & Scala:如何按属性值从对象列表中获取属性值?



我想从instanceGroupName=slave中获取requestedInstanceCount。杰克逊怎么能做到这一点?

以下是job-flow.json:

{
"generalId": "ABC"
"instanceCount": 4,
"instanceGroups": [
{
"instanceGroupId": "CDE",
"instanceGroupName": "master",
"requestedInstanceCount": 1
},
{
"instanceGroupId": "FGH",
"instanceGroupName": "slave",
"requestedInstanceCount": 8
}
]
}

到目前为止,这就是我所拥有的:

val jobFlowJson: String = new String(Files.readAllBytes(Paths.get("/mnt/var/lib/info/job-flow.json")))
val jsonNode = mapper.readValue(jobFlowJson, classOf[JsonNode])
val instanceCount = jsonNode.get("requestedInstanceCount").asInt

但是存在2个值,并且master和amp;奴隶可以随时改变。提前感谢!

您必须一步一步地遍历JSON树:

  • 获取instanceGroups作为数组
  • 遍历数组以查找所需的项
  • 提取值requestedInstanceCount

类似的东西(伪Scala代码(:

jsonNode.get("instance groups")
.asArray
.collect {
case item if item.get("instanceGroupName").asString == "..." =>
item.get("requestedInstanceCount")
}

或者定义一些表示结构的case类,并将JSON传递到case类中。如果你没有具体的理由不这样做,那么操作起来会容易得多。

最新更新