使用jq从JSON中的数组中提取元素返回“无法使用字符串索引数组”

时间:2017-01-18 09:52:14

标签: json jq

我有一个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"

1 个答案:

答案 0 :(得分:2)

要选择一个块,您需要使用文档中描述的表达式:

  

Clang 3.9.1

     

如果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"