如何用JQ提取JSON文件中匹配指定邮箱的resourceName值
问题排查
你原本的命令失效的核心原因是 emailAddresses 是数组结构,无法直接通过.emailAddresses.value访问到内部邮箱值,需要先展开数组元素再做匹配判断。
正确实现方案
方案1:精确匹配邮箱(推荐,无正则额外开销)
如果需要完全匹配指定邮箱,使用如下命令:
jq -r '.connections[] | select( .emailAddresses[]?.value == "mail@mail1.com" ) | .resourceName' file.json
说明:
- 加
-r参数可以直接输出纯文本name_1,不会带多余的双引号 - 表达式中的
?是容错处理,当某个connections元素不存在emailAddresses字段时不会抛出报错
方案2:保留不区分大小写的正则匹配
如果需要沿用你原本的不区分大小写正则匹配逻辑,使用any()判断数组中是否存在符合条件的元素:
jq -r '.connections[] | select( any(.emailAddresses[]; .value | test("mail@mail1.com"; "i")) ) | .resourceName' file.json
内容的提问来源于stack exchange,提问作者TooNetCreation
相关产品推荐
相关产品推荐

