我如何使用 jmesPath 过滤带有包含数组的表达式的 javascript 对象?

How can I filter javascript objects with an expression that has array in it with jmesPath?

我有一组用户,每个用户都有几个角色。数组的例子如下所示。

[
    {
        id: 1,
        username: 'john',
        roles: [
            {id: 500, name: 'Admin'},
            {id: 501, name: 'Owner'}
        ]
    },
    {
        id: 2,
        username: 'joe',
        roles: [
            {id: 500, name: 'Admin'},
        ]
    },
    {
        id: 3,
        username: 'june',
        roles: [
            {id: 502, name: 'User'},
        ]
    }
]

我正在尝试使用 jmesPath 获取所有具有 Admin 角色的用户。我试过 [?roles[].name=='Admin'] 但这给出了 null 值。可以用 jmesPath 做到这一点,如果可以,你能给我一个这个例子的表达式吗?

您可以使用普通 JavaScript 获得相同的结果:

假设您的数组存储在 var users = [...].

users.filter((i)=> i.roles.some((s) => s.name === "Admin"))

可以看到this sample with jsBin

我对这个例子和你的数据做了一些尝试

http://jmespath.org/examples.html#filtering-and-selecting-nested-data

我用这个表达式让它工作

[?roles[?name=='Admin']]