выбрать из потока объекта заданный массив ключей - PullRequest
0 голосов
/ 05 марта 2019

Как выбрать в jq некоторые поля из массива ключей? Не константы, а список ключей:

| $fields = ["name", "url"]
| . [$fields]

Ответы [ 5 ]

0 голосов
/ 05 марта 2019

вот альтернативное решение для сценариев оболочки:

bash $ keys=("a" "c")
bash $ for i in ${keys[@]}; do echo '{"a":1,"b":2,"c":3}' | jtc -w"[$i]"; done
1
3
bash $

, если для ключей требуется рекурсивный поиск, используйте вместо этого этот обходной путь: -w"<$i>l"

jtc aИнструмент командной строки unix, можно найти здесь: https://github.com/ldn-softdev/jtc

0 голосов
/ 05 марта 2019

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

$ echo '{"a":1,"b":2,"c":3}' |
  jq --argjson keys '["a","c"]' '$keys[] as $key | getpath([$key])'
1
3
0 голосов
/ 05 марта 2019

Если вы просто хотите получить поля из объекта верхнего уровня из массива, вы можете просто индексировать нормально:

$ jq --arg fields 'name,url' '.[$fields | split(",")[]]' input.json

И вообще, если вам нужны значения в произвольных путях, было бы лучшевведите как пути:

$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json
0 голосов
/ 05 марта 2019

Я думаю, что это будет так:

$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json
0 голосов
/ 05 марта 2019

(без примера ввода / вывода это лучшее, что я могу догадаться)

может быть, это:

<<input>> | jq '.[] | {foo: .name, bar: .url}'

что-нибудь из этого помогает? https://stedolan.github.io/jq/tutorial/

...