使用jq从JSON中的数组中提取元素返回;无法为字符串为“”的数组编制索引;
我有一个JSON文件:使用jq从JSON中的数组中提取元素返回;无法为字符串为“”的数组编制索引;,json,jq,Json,Jq,我有一个JSON文件: $ cat ~/tmp/example1.json [ { "keyProp": 11111111111111, "values": [ "VALUE1" ] }, { "keyProp": 2222, "values": [ "VALUE2" ] } ] 我想使用jq选择keyProp==11111的值。预期输出为“VALUE2” 我试过了,但没有结果: cat ~/tmp/exa
$ cat ~/tmp/example1.json
[
{
"keyProp": 11111111111111,
"values": [
"VALUE1"
]
},
{
"keyProp": 2222,
"values": [
"VALUE2"
]
}
]
我想使用jq选择keyProp==11111
的值。预期输出为“VALUE2”
我试过了,但没有结果:
cat ~/tmp/example1.json | jq 'select(.keyProp==11111111111111)'
jq: error (at <stdin>:14): Cannot index array with string "keyProp"
cat~/tmp/example1.json | jq'选择(.keyProp==11111)'
jq:错误(at:14):无法使用字符串“keyProp”索引数组
要选择块,需要使用文档中描述的表达式:
如果foo返回,则函数select(foo)生成的输入将保持不变
对于该输入为true,否则不生成输出
它对于筛选列表非常有用:[1,2,3]|映射(选择(.>=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"
我想您是指keyProp=111…111的值2