为什么 jq array returns length 大于 array items 的实际数量

Why jq array returns length is greater than actual no of array items

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

要了解为什么会得到一个包含 4 个元素的数组,请查看子 shell:

的输出
cat jsonfile.json | jq '.file' | jq -r 'keys'

这会产生:

[
  "a",
  "b"
]

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

试试这个:

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

输出:

a
b

我也简化了你原来的表达方式。 (感谢@JeffMercado!)