如何在jq中检查字符串数组是否包含指定的精确字符串?
实现jq对JSON数组的精确字符串匹配
你遇到的问题是因为jq的contains()函数对数组的匹配逻辑是子串包含,而非精确成员匹配——它会检查数组中是否存在元素包含目标字符串(比如"aa"包含"a",所以contains(["a"])返回true)。
要实现精确匹配,可以用以下几种方法:
方法1:使用IN运算符(jq 1.6+支持)
这是最简洁的写法,直接判断目标字符串是否是数组的成员:
# 检查数组是否包含"aa"(精确匹配) echo '["aa", "bb", "cc"]' | jq '"aa" IN .' # 输出:true # 检查数组是否包含"a" echo '["aa", "bb", "cc"]' | jq '"a" IN .' # 输出:false
方法2:使用any()函数(兼容低版本jq)
通过遍历数组元素,判断是否存在与目标值严格相等的元素:
# 精确匹配"aa" echo '["aa", "bb", "cc"]' | jq 'any(.[]; . == "aa")' # 输出:true # 检查"a" echo '["aa", "bb", "cc"]' | jq 'any(.[]; . == "a")' # 输出:false
方法3:使用index()函数
index()会返回目标值在数组中的索引位置,不存在则返回null,通过判断索引是否存在实现精确匹配:
# 精确匹配"aa" echo '["aa", "bb", "cc"]' | jq 'index("aa") != null' # 输出:true # 检查"a" echo '["aa", "bb", "cc"]' | jq 'index("a") != null' # 输出:false
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

