Jackson 和 斯卡拉 :如何 通过 属性 值 从 对象 列表 中 获取 属性 值 ?

yzuktlbb  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(175)

我想从instanceGroupName = slave中得到requestedInstanceCount。如何用Jackson实现这一点?
下面是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个值,主从之间的顺序可以随时改变。提前感谢!

ccrfmcuu

ccrfmcuu1#

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

  • 以数组形式获取instanceGroups
  • 循环访问数组以查找所需的项
  • 提取值requestedInstanceCount

如下所示(伪Scala代码):

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

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

相关问题