我有一个JSON文件:
$ cat ~/tmp/example1.json
[
{
"keyProp": 11111111111111,
"values": [
"VALUE1"
]
},
{
"keyProp": 2222,
"values": [
"VALUE2"
]
}
]
我想使用jq选择keyProp==11111111111111
的值。预期输出为“VALUE2”
我试过但没有结果:
cat ~/tmp/example1.json | jq 'select(.keyProp==11111111111111)'
jq: error (at <stdin>:14): Cannot index array with string "keyProp"
答案 0 :(得分:2)
要选择一个块,您需要使用文档中描述的表达式:
如果foo返回,函数select(foo)会使其输入不变 对于该输入为true,否则不产生输出。
它对过滤列表很有用:[1,2,3] | map(select(。&gt; = 2))将 给你[2,3]。
jq '.[] | select(.id == "second")' Input [{"id": "first", "val": 1}, {"id": "second", "val": 2}] Output {"id": "second", "val": 2}
所以在这种情况下你需要说:
$ jq '.[] | select(.keyProp==11111111111111)' file
{
"values": [
"VALUE1"
],
"keyProp": 11111111111111
}
要提取value
中的列表,只需这样说:
$ jq '.[] | select(.keyProp==11111111111111).values' file
[
"VALUE1"
]
您甚至可以使用索引提取第一个值:
$ jq '.[] | select(.keyProp==11111111111111).values[0]' file
"VALUE1"