使用jq从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

我有一个JSON文件:

$ 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