JMESPath查询字符串列表报错:contains函数类型异常排查
问题解决:JMESPath筛选字符串列表报错
错误原因
报错提示contains()函数收到未知类型值,核心问题有两点:
- JMESPath查询语法误用:你用反引号
`fixedaddress`包裹目标子串,反引号在JMESPath中用于引用对象键名这类标识符,而匹配字符串子串需要用单引号或双引号。 - 输入数据格式非法:你提供的输入JSON结构无效(
{ [ ... ] }),正确的数组要么作为顶层结构,要么嵌套在键值对中(比如{"items": [ ... ]}),否则Ansible无法将其解析为合法数组,导致JMESPath无法识别元素类型。
修复步骤
修正JMESPath查询语句
将反引号替换为单引号,确保正确匹配字符串子串:vars: jmesquery: "[?contains(@, 'fixedaddress')]"确保输入数据格式合规
确认ip_record_refs是有效的字符串数组,示例格式如下:[ "fixedaddress/ZG5zLmZpeGVkX2FkZHJlc3MkMTAuMjM5LjEyLja", "record:a/ZG5zLmJpbmRfYSQuMjMubmwubW9kLG1hcmMwMDAxLW1" ]如果数据来自字典的某个字段(比如
{"records": [ ... ]}),则查询语句需先定位数组:jmesquery: "records[?contains(@, 'fixedaddress')]"验证效果
修正后执行任务,将正确筛选出包含fixedaddress的字符串,返回目标元素。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

