如何在jq中从键数组中选择某些字段?不是常量,而是键列表:
| $fields = ["name", "url"]
| . [$fields]
答案 0 :(得分:0)
如果您只想从数组中获取顶级对象的字段,则可以正常索引:
$ jq --arg fields 'name,url' '.[$fields | split(",")[]]' input.json
通常,如果需要在任意路径中输入值,最好将其输入为路径:
$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json
答案 1 :(得分:0)
对于仅值,您可以使用getpath
:
$ echo '{"a":1,"b":2,"c":3}' |
jq --argjson keys '["a","c"]' '$keys[] as $key | getpath([$key])'
1
3
答案 2 :(得分:0)
这是shell脚本的另一种解决方案:
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
是unix命令行工具,可以在这里找到:https://github.com/ldn-softdev/jtc
答案 3 :(得分:-1)
(没有示例输入/输出,这是我能猜到的最好的结果)
也许是这样:
<<input>> | jq '.[] | {foo: .name, bar: .url}'
答案 4 :(得分:-1)
我想是这样的:
$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json