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

JMESPath多特征过滤异常:单条件正常多条件返回空结果求助

JMESPath contains函数列表过滤失效的原因及解决方法

问题根源

JMESPath的contains函数参数顺序和用法有明确规则:

  • 第一个参数是容器(可以是字符串或数组),第二个参数是要查找的目标元素
  • 单关键词生效的原因:contains(word, cube)是检查字符串word中是否包含子串cube,完全符合函数逻辑,所以能正确匹配
  • 列表过滤失效的原因:contains([cube,-], word)是检查数组["cube","-"]里是否存在与word(即"ice-cube")完全相等的元素,显然不存在,因此返回空结果

正确的列表关键词过滤写法

要实现「word包含列表中任意一个关键词」的需求,需要结合any函数遍历关键词列表,逐个验证包含关系:

import jmespath

data = {'collection': {'items': {'word': 'ice-cube'}}}
# 正确的查询表达式
result = jmespath.search(
  'values(collection)[?word!=null && [`cube`,`-`] | any(@, contains(word, @))]', 
  data
)
print(result)  # 输出: [{'word': 'ice-cube'}]

表达式说明

  • [cube,-] | any(@, contains(word, @)):先构造关键词列表,再用any函数遍历列表中的每个元素@,检查word是否包含该元素;只要有一个关键词匹配,整个条件就为真

内容的提问来源于stack exchange,提问作者Blob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:20:42