从对象流中选择给定的键数组

时间:2019-03-05 19:16:22

标签: json key jq

如何在jq中从键数组中选择某些字段?不是常量,而是键列表:

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

5 个答案:

答案 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}'

这有帮助吗? https://stedolan.github.io/jq/tutorial/

答案 4 :(得分:-1)

我想是这样的:

$ jq --argjson paths '[["foo"],["foo","bar"]]' 'getpath($paths[])' input.json