代码之家  ›  专栏  ›  技术社区  ›  jrwren odony

有没有更好的方法在jq中编写嵌套条件?

jq
  •  0
  • jrwren odony  · 技术社区  · 6 年前

    我试着用 if X and Y then A else B

    这是有效的:

    if .foo == "bar" then 
      if  [.bazes[] | .bat=="blah"] | any then .add = "added" else . end 
    else . end 
    

    这不起作用:

    if .foo == "bar" and [.bazes[] | .bat=="blah"] | any then 
       .add = "added"
    else . end 
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   peak    6 年前

    查询失败是因为关联性不是您想要的。添加括号以明确您的意图通常不是一个坏主意:

    if .foo == "bar" 
       and ([.bazes[] | .bat=="blah"] | any)
    then .add = "added"
    else . end   
    

    任意/2

    您可以通过使用 any/2

    if .foo == "bar" 
       and any(.bazes[]; .bat=="blah")
    then .add = "added"
    else . end