为什么jq数组的返回长度大于数组项的实际数

时间:2015-09-27 14:38:23

标签: arrays bash jq

我有一个json文件

{
  "file" : {
      "a" : 1,
      "b" : 2
    }
}

我正在使用jq来计算此json对象中的文件值的数量。

然后在bash上使用

arr=($(cat jsonfile.json | jq '.file' | jq -r 'keys'))
echo ${#arr[@]}

这里我得到输出4,而只有2个键a,b

为什么会这样,我如何获得arr只有两个元素ab。?

1 个答案:

答案 0 :(得分:1)

要理解为什么要获得4个元素的数组,请查看子shell的输出:

cat jsonfile.json | jq '.file' | jq -r 'keys'

这会产生:

[
  "a",
  "b"
]

每一行都会成为数组的一个元素 - > 4行。

请改为尝试:

jq -r '.file | keys | .[]' jsonfile.json

输出:

a
b

我还简化了你的原始表达。 (谢谢@JeffMercado!)

相关问题