труба в del (& hellip; | select (& hellip; | & hellip;)) работает в v1.6, как получить такой же результат в v1.5?

«Проблема» на самом деле заключается в том, что вы используете и не выполняете сценарий. Когда вы отправляете файл, его содержимое будет выполняться в текущей оболочке, вместо того, чтобы размножать подоболочку. Таким образом, все, включая выход, повлияет на текущую оболочку.

Вместо использования exit вы захотите использовать return.

1
задан Justin Maxwell 27 February 2019 в 16:46
поделиться

2 ответа

OP вернулся через несколько часов - я нашел кое-что, что, кажется, работает, все еще очень заинтересованный в любых комментариях / других способах взломать проблему / улучшения.

.content.data  
  | .hits[].doc.notes |= map (
    if ( .types | any(startswith("x") or startswith("y")))
      then .
      else empty
    end 
  )
0
ответ дан Justin Maxwell 27 February 2019 в 16:46
поделиться

Это всего лишь вариант решения, предложенного ОП. Он иллюстрирует, как сложное использование del может быть выражено более простым и надежным способом путем создания подходящей вспомогательной функции.

Соответствующая вспомогательная функция в данном случае реализует требование извлечения:

# Input: an object some keys of which are to be removed
def prune:
   to_entries
   | map( select( any(.value.types[]; test("^(x|y)")) ) )
   | from_entries ;

Теперь задача может быть выполнена с использованием одной строки:

.content.data | .hits |= map( .doc.notes |= prune )

Вызов [ 114]

При использовании вышеуказанной jq-программы в program.jq подходящий вызов jq будет выглядеть следующим образом:

jq -f program.jq input.json

0
ответ дан peak 27 February 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: