我正在使用 jq v1.5 。鉴于输入:
{
"mine": [
"foo",
"baz"
],
"stuff": {
"foo": {
"name": "Foo"
},
"bar": {
"name": "Bar"
},
"baz": {
"name": "Baz"
},
"qux": {
"name": "Qux"
}
}
}
如何获取 .mine 的所有 .stuff.name ?
例如,期望的输出:
[
"Baz",
"Foo"
]
答案 0 :(得分:5)
使用简单的jq
过滤器而不进行其他shell处理,请按以下步骤操作。
jq '[.mine[] as $in | .stuff[$in].name]'
逻辑基本上是来自.mine
的值的索引,并且每个条目在.name
.stuff
值
答案 1 :(得分:-1)
解。我已将文件保存在/ tmp / 1中:
cat /tmp/1 | jq "[ .stuff | $(cat /tmp/1 | jq -r '.mine[]' | sed 's/^/./;s/$/.name/;' | tr '\n' ',' | sed 's/,$//') ]"
首先我得到.mine[]
中的名字,即foo
和baz
。然后我将它们转换为.foo.name, .baz.name
并传递给jq [ .stuff | $(...) ]
,结果为[ .stuff | .foo.name, .baz.name ]
。