我有以下带有示例值的 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 值的正确方法是什么?
找到答案:
cat <file>.json | jq -r '.files[] | select(.fileName=="FOO") | .md5'
回答更通用的如何从选择所有文件名的数组中选择值:
cat results.json | jq '.files[] | .filename'
或:
cat <file>.json | jq -r '.files[] | select(.fileName=="FOO").md5'
如果你想将你的项目保留在数组中,那么可以做更多的过滤器
cat <file>.json | jq -r '.files | map(select(.fileName=="FOO").md5)'
这会导致
['blablabla']