提问人:Max 提问时间:3/4/2023 最后编辑:Max 更新时间:3/4/2023 访问量:132
jq 中的 use 或运算符
Use or operator in jq
问:
我正在使用 jq 解析 JSON。JSON 有一个名为“players[]”的数组,其中包含一个键“name”,其中包含以下示例值:
ZZZ-104TH-082-ADV-004
ZZZ-149TH-435-ADV-WL-006
GDS-123-CIC-007_temp-blocked
LRMR-121-CIC-002_temp-removed
NOS-343-CIC-003_Failed
E180TH-426-CIC-008
LBRTY-185-CIC-005
我有这个 jq 行:
jq '.players[] | if .name | contains( "ZZZ" ) then empty else .name end'
这将返回以下名称:
GDS-123-CIC-007_temp-blocked
LRMR-121-CIC-002_temp-removed
NOS-343-CIC-003_Failed
E180TH-426-CIC-008
LBRTY-185-CIC-005
我还想排除包含“失败”或“临时”的名称,它们将返回以下内容:
E180TH-426-CIC-008
LBRTY-185-CIC-005
我试过了
jq '.players[] | if .name | contains( "ZZZ" ) or contains( "Failed" ) then empty else .name end'
但这只排除了包含“ZZZ”的名称。如何过滤掉包含“ZZZ”或“Failed”或“temp”的名称?
答:
1赞
pmf
3/4/2023
#1
我会选择(如果它的参数计算结果为 ,即没有匹配项,它会发出),对于正则表达式:select
empty
false
test
jq '.players[].name | select(test("ZZZ|temp|Failed") | not) '
"E180TH-426-CIC-008"
"LBRTY-185-CIC-005"
评论
0赞
Max
3/4/2023
好的,我简化了我的问题。真的,我返回了一个不同的键“id”: 然后稍后有代码查找与 id 关联的名称。所以我正在过滤“name”键,但返回“id”键的值。jq '.players[] | if .name | contains( "ZZZ" ) then empty else .id end'
1赞
pmf
3/4/2023
@Max 然后在过滤器内部移动,并改为输出:.name
select
.id
.players[] | select(.name | test("ZZZ|temp|Failed") | not).id
评论