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

[
    {
        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来获得具有管理员角色的所有用户。 我已经尝试过[?roles[].name=='Admin']但这给出的是null值。 可以使用jmesPath做到这一点,如果可以,您可以给我这个示例的表达式吗?

#1楼 票数:1 已采纳

我在这个例子和您的数据上做了一些尝试

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

我用这个表达使它起作用

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

#2楼 票数:0

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

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

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

您可以使用jsBin看到此示例

  ask by Sahand Javid translate from so

未解决问题?本站智能推荐:

1回复

mongodb / jsonpath / jmespath 表达式以过滤具有包含特殊或重音字符的属性的对象

我需要过滤此 json 中包含特殊字符的对象。 (我可以编写 javascript 或在 mongo 中导入和查询数据。) 预期输出 有没有办法在 jsonpath 或 jmspath 中使用正则表达式来做到这一点? 我尝试了各种方法来接近我需要的东西,例如这些,但此时我被阻止了
1回复

如何使用 JMESPATH 和 javascript 获取具有特定名称值的最后 3 个元素?

我有以下 json 数据数组: 我想使用 JMESPath javascript 库来获取每个不同名称值的最后 3 个条目。 例如: 所以每个名字的最后 3 次出现 = Button* 检查 stackOverflow,我看到使用 JQ 可以使用此函数: map_values(delpat
1回复

使用JMESPath从JSON对象提取嵌套元素值

我正在尝试使用JMESPath从JSON文档中提取和转换元素。 这是我的测试JSON数组: 我正在尝试使用以下JMESPath表达式提取OrderNum键的值,但它返回null 。 这是我的搜索表达式: 为什么这不起作用?
1回复

是否有可能在JMES Path中获得所有具有最大值的属性的对象?

(有些精度:我想要一个完整的JMES Path解决方案,所以我不想使用javascript或其他语言来存储变量) 例如,如果我有一个像这样的简单对象: 如果我在这里像这样使用max_by函数: max_by(@,&att1) ,它将得到以下结果: 在这种情况下,只有
1回复

使用jmespath通过两个参数查找最小值和最大值

我有这样的对象,我需要用jmespath评估哪个是“最便宜的” 输出应为:“ a”对象 我在做: 但没有运气
2回复

如何使用jmeshpath比较JSON数据中的日期?

我有一个 JSON 数据,其中包含像jan 23,2018这样的日期。 如何将 JSON 数据日期与当前日期进行比较? 如何使用jmespath获取日期大于当前日期的数据?
2回复

如果表达式存在,则使用 Jmespath 过滤 JSON 并返回值,如果它不返回 None/Null (python)

我怎样才能让 JMESPath 只返回 json 中的值(如果它存在),如果它不存在则返回 none/null。 我在 python 应用程序中使用 JMESPath,下面是一个简单的 JSON 数据示例。 { "name": "Sarah", "region": "south west",
1回复

如何在 JMESPath 表达式中使用变量?

正则表达式完美地工作如下: jmespath.search(currentStats, 'Items[?Name == Annie ]') 但我想让我的过滤键作为变量。 我试过 var name = "Annie" jmespath.search(JSONdata, 'Items[?Name =