如何在jq中使用Boolean NOT筛选非@xyz.com域名的用户?
jq筛选非@xyz.com域名用户的正确写法
你当前筛选@xyz.com域名用户的代码没问题,要实现反向筛选(排除该域名用户),jq里有两种标准的布尔取反方式:
方式一:用not关键字取反
把test的结果通过not反转后传入select:
.[] | select(.email | test("@xyz.com") | not) | {id, username}
方式二:用!运算符取反
!是更简洁的取反写法,逻辑和not完全一致:
.[] | select(.email | !test("@xyz.com")) | {id, username}
你之前的写法错误原因
你尝试的两种写法都不符合jq语法规则:
test函数的第二个参数只能是正则修饰符(比如i代表忽略大小写),不能填!=这类比较运算符- jq中不能直接用
!=对函数返回值取反,必须使用专门的布尔取反操作符not或!
可选优化:处理缺失email字段的情况
如果你的JSON数据里可能存在没有email字段的用户,可以先判断字段存在再筛选,避免报错:
.[] | select(.email != null and !(.email | test("@xyz.com"))) | {id, username}
内容的提问来源于stack exchange,提问作者Tom S
相关产品推荐
相关产品推荐

