如何使用切片访问带有 jmespath 的某些元素?

How do I access certain elements with jmespath using slicing?

我有以下JSON

{
    "items": [
        {
            "configurationStatus": "SYNCED",
            "conflictDetectionState": "IN_SYNC",
            "connectivityState": "ONLINE",

我可以使用 items[*].isModel 访问内部的各个元素,但是,我不知道如何访问前 3 个元素。我试过类似 items[*].[0:2] 的方法,但没有用。我很好奇如何使用切片访问前 3 个元素。

您可能会在尝试实现此目的时遇到一些问题,因为正如 JMESPath 文档中指出的那样,对象是:

object (an unordered collection of key value pairs)

来源:https://jmespath.org/specification.html,重点,我的

因此,您最终可能会根据实施情况得到不同的密钥,并获得真正随机的结果。


现在你的方法的问题是切片只能作用于数组。

A slice expression allows you to select a contiguous subset of an array.

来源:https://jmespath.org/specification.html#slices,重点,我的

为了从散列中得到一个数组,你可以做的是使用 values 函数,但请注意 你会丢失 key/value关联过程中.
然后,假设您有一个数组,您现在可以应用切片技术。

所以查询:

items[].values(@)[0:3]

在 JSON:

{
    "items": [
        {
            "configurationStatus": "SYNCED",
            "conflictDetectionState": "IN_SYNC",
            "connectivityState": "ONLINE",
            "foo": "bar",
            "baz": "qux"
        },
        {
            "configurationStatus": "SYNCED′",
            "conflictDetectionState": "IN_SYNC′",
            "connectivityState": "ONLINE′",
            "foo": "bar′",
            "baz": "qux′"
        }
    ]
}

这将得到:

[
  [
    "SYNCED",
    "IN_SYNC",
    "ONLINE"
  ],
  [
    "SYNCED′",
    "IN_SYNC′",
    "ONLINE′"
  ]
]