Есть ли лучший способ написать вложенное условие в JQ? - PullRequest
0 голосов
/ 15 января 2020

Я пытался использовать if X and Y then A else B в jq, но есть некоторый скрытый контекст, который выдает ошибки. Это как если бы условие в X изменяло контекст или состояние, которые затем используют Y и A, но если я вложил операторы if, я не получил бы такое поведение.

Это работает:

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 

1 Ответ

1 голос
/ 15 января 2020

Неудачный запрос делает это, потому что ассоциативность не то, что вы хотите. Добавление скобок, чтобы прояснить ваши намерения, как правило, является неплохой идеей:

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

any / 2

Вы можете обойти проблему, найти более эффективное решение и более точно соответствовать Engli sh использование с использованием any/2:

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