JMESPath当前数组索引

时间:2018-07-25 19:26:35

标签: jmespath

在JMESPath中使用以下查询:

people[].{"index":@.index,"name":name, "state":state.name}

在此示例数据上:

{
  "people": [
    {
      "name": "a",
      "state": {"name": "up"}
    },
    {
      "name": "b",
      "state": {"name": "down"}
    },
    {
      "name": "c",
      "state": {"name": "up"}
    }
  ]
}

我得到:

[
  {
    "index": null,
    "name": "a",
    "state": "up"
  },
  {
    "index": null,
    "name": "b",
    "state": "down"
  },
  {
    "index": null,
     "name": "c",
     "state": "up"
  }
]

如何获取index属性以实际具有数组的索引?我意识到@.index的语法不正确,但是还找不到能够返回索引的函数。有没有办法包含当前数组索引?

2 个答案:

答案 0 :(得分:1)

这不完全是您要求的形式,但我可能为您提供答案:

people[].{"name":name, "state":state.name} | merge({count: length(@)}, @[*])

此请求给出以下结果:

{
  "0": {
    "name": "a",
    "state": "up"
  },
  "1": {
    "name": "b",
    "state": "down"
  },
  "2": {
    "name": "c",
    "state": "up"
  },
  "count": 3
}

因此,该对象的每个属性都有一个索引,但最后一个count除外,它仅引用属性的编号,因此,例如,如果要使用循环浏览对象的属性,可以这样做,因为您知道属性count给出了要浏览的属性数量。

答案 1 :(得分:0)

问题

  • 使用Jmespath查询语法从一系列数组元素中提取当前数组元素的数字索引。

陷阱

  • 截至撰写本文(2019-03-22)时,此功能尚未成为标准Jmespath规范的一部分。

解决方法

  • 当从各种编程语言中运行Jmespath时,这是可能的,但是必须在Jmespath之外进行。