2015-07-13 2 views
1

Я использую jq для анализа содержимого JSON через bash. Хорошо работает до сих пор.Как скомпилировать jq-операторы?

Теперь у меня есть это содержание:

{ "_id" : { "$oid" : "55a3fb74e4b0feb11ba5bec2" }, 
"alertId" : 15, "headline" : "License for XXXXXX is about to expire", 
"includedItems" : []} 

Теперь я использую JQ легко получить alertId и заголовок, например, так:

JQ .alertId, .headline FILENAME

Но, Я также хочу добавить количество элементов в массив includesItems. Например:

jq '.includedItems | length 'FILENAME

Эта работа, но мне нужна ее часть одной команды. Причина в том, что FILENAME - это файл с огромным количеством JSON, и если я буду запускать команды отдельно, я бы потратил много времени, пытаясь объединить результаты. Поэтому вместо этого я надеялся найти способ добиться чего-то вроде этого:

jq .alertId, .headline, '. IncludedItems | длина 'FILENAME

Но это не работает.

ответ

2

Проблема с '.alertId,.headline,.includedItems | length' заключается в том, что , имеет более высокий приоритет, чем |, поэтому он эквивалентен '(.alertId,.headline,.includedItems) | length'. Так как вы хотите, чтобы ваши | иметь более высокий приоритет — вы хотите .includedItems | length быть только один список-элемент — вам нужно сгруппировать его с помощью скобок:

jq '.alertId, .headline, (.includedItems | length)' FILENAME 
Смежные вопросы