web-dev-qa-db-ja.com

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の正しい使用法を学びたいです。

30
Xu Wang

そのはず:

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

.[]は外側の配列を繰り返し処理し、.aux[]その後、すべてのノードのaux配列と.def.defプロパティ。

これは出力します:

"I want this"

二重引用符を削除する場合は、-r--raw)からjqへ:

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

出力:

I want this
58
hek2mgl