Jq: 不能用字符串索引数组

我在一个文件中有以下内容(我称之为“ myfile”) :

[{
"id": 123,
"name": "John",
"aux": [{
"abc": "random",
"def": "I want this"
}],
"blah": 23.11
}]

如果文件没有第一个 [和最后一个 ],我可以解析它,如下所示:

$ cat myfile | jq -r '.aux[] | .def'
I want this
$

但是有了 []我得到了:

$ cat myfile | jq -r '.aux[] | .def'
jq: error: Cannot index array with string

如何使用 jq 处理 []?(我确信我可以用不同的工具解析它们,但是我想学习 jq 的正确用法。

131268 次浏览

It should be:

jq '.[].aux[].def' file.json

.[] iterates over the outer array, .aux[] then iterates over the the aux array of every node and .def prints their .def property.

This will output:

"I want this"

If you want to get rid of the double quotes pass -r (--raw) to jq:

jq -r '.[].aux[].def' file.json

Output:

I want this