Arrays 在jq中,基于另一个数组获取数组
我正在使用jqv1.5。根据输入:Arrays 在jq中,基于另一个数组获取数组,arrays,json,bash,iteration,jq,Arrays,Json,Bash,Iteration,Jq,我正在使用jqv1.5。根据输入: { "mine": [ "foo", "baz" ], "stuff": { "foo": { "name": "Foo" }, "bar": { "name": "Bar" }, "baz": { "name": "Baz" },
{
"mine": [
"foo",
"baz"
],
"stuff": {
"foo": {
"name": "Foo"
},
"bar": {
"name": "Bar"
},
"baz": {
"name": "Baz"
},
"qux": {
"name": "Qux"
}
}
}
如何获取我的的所有.stuff.name文件
例如,所需输出:
[
"Baz",
"Foo"
]
解决方案。我已将文件保存在/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]
使用一个简单的jq
过滤器,无需其他shell处理,如下所示
jq '[.mine[] as $in | .stuff[$in].name]'
逻辑基本上是索引.mine
中的值,并为每个条目在.stuff
中获得等效的.name
值
我不确定该尝试什么。我必须首先将数组.mine拉入一个bash变量,然后迭代该变量。我想知道这是否可以在jq内部完成。