jq 从数组中选择值

问题描述 投票:0回答:4

我有以下带有示例值的 JSON 文件:

{
    "files": [{
        "fileName": "FOO",
        "md5": "blablabla"
    }, {
        "fileName": "BAR",
        "md5": "alaldlafj"
    }]
}

现在我想要的是返回 md5 值,例如文件名是“FOO”。为此,我在

jq
中有以下声明:

cat <file>.json | jq '.[] | select(.fileName=="FOO")' 

然而回复是:

jq: error (at <stdin>:11): Cannot index array with string "fileName"

返回 key fileName 等于某个参数的 md5 值的正确方法是什么?

json jq
4个回答
83
投票

找到答案:

cat <file>.json | jq -r '.files[] | select(.fileName=="FOO") | .md5'

13
投票

回答更通用的如何从选择所有文件名的数组中选择值:

cat results.json | jq '.files[] | .filename'

7
投票

或:

cat <file>.json | jq -r '.files[] | select(.fileName=="FOO").md5'

0
投票

如果你想将你的项目保留在数组中,那么可以做更多的过滤器

cat <file>.json | jq -r '.files | map(select(.fileName=="FOO").md5)'

这会导致

['blablabla']
© www.soinside.com 2019 - 2024. All rights reserved.