You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JMESPath根据JSON中input.group的值筛选group_data中的组?

解决JMESPath动态匹配组并验证用户成员身份的问题

问题原因

你之前的表达式失效,是因为在JMESPath的过滤条件([]?)内部,上下文是数组中的单个组对象,直接写input.group会试图在当前组对象里找input属性,而不是根节点的input。

现有结构下的解决方案

不需要修改JSON结构,只要在引用根节点变量时加上$前缀即可:

  1. 精确匹配目标组
    用==做精确匹配(比contains更适合你的场景,避免部分匹配的问题),表达式:
group_data[?name == $input.group]
  1. 直接返回用户是否在组内的布尔值
    把匹配组和检查成员两步合并,直接输出布尔结果:
contains(group_data[?name == $input.group].members[], $input.user)

或者用长度判断(避免空数组的情况,结果更严谨):

length(group_data[?name == $input.group && contains(members, $input.user)]) > 0

优化结构后的更优方案

如果允许修改group_data的结构,将其从数组改成以组名为键的对象,查询效率会更高:
修改后的JSON:

{
    "input": {
        "user": "john",
        "group": "johns_group"
    },
    "group_data": {
        "johns_group": {
            "members": ["john", "michael"]
        },
        "sallys_group": {
            "members": ["sally", "jane"]
        }
    }
}

对应的JMESPath表达式更简洁:

contains(group_data[$input.group].members[], $input.user)

内容的提问来源于stack exchange,提问作者Anderson-A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:10:13