Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在jq中,基于另一个数组获取数组_Arrays_Json_Bash_Iteration_Jq - Fatal编程技术网

Arrays 在jq中,基于另一个数组获取数组

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" },

我正在使用jqv1.5。根据输入:

{
    "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内部完成。