4

在 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不是正确的语法,但无法找到返回索引的函数。有没有办法包含当前数组索引?

4

2 回答 2

3

用例

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

陷阱

  • 在撰写本文时 (2019-03-22),此功能不是标准 Jmespath 规范的一部分。

解决方法

  • 这在从各种编程语言中运行 Jmespath 时是可能的,但是这必须在 Jmespath 之外完成。
于 2019-03-23T02:47:32.600 回答
2

这不完全是您要求的表格,但我有一个可能的答案:

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给出了数字要浏览的属性。

于 2019-08-23T15:28:49.043 回答