【问题标题】:JMESPath current array indexJMESPath 当前数组索引
【发布时间】:2018-07-25 19:26:34
【问题描述】:

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

【问题讨论】:

    标签: indexof jmespath


    【解决方案1】:

    用例

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

    陷阱

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

    解决方法

    • 这在从任何一种编程语言中运行 Jmespath 时都是可能的,但是这必须在 Jmespath 之外完成。

    【讨论】:

      【解决方案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 属性给出了要浏览的属性数。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2016-03-29
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多