我想从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类中。如果你没有具体的理由不这样做,那么操作起来会容易得多。