2015-12-31 12 views
13

ich folgenden in einer Datei habe (was ich nenne "myfile"):jq: Kann nicht Index-Array mit String

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

Ich kann es analysieren, ohne die [ und ] wie folgt:

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

aber mit dem [ und ] ich:

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

Wie kann ich mit den und mit jq umgehen? . (Ich bin sicher, dass ich sie weg mit einem anderen Werkzeug analysieren könnte, aber ich will die korrekte Verwendung von jq lernen

Antwort

26

Es soll:

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

.[] iteriert über die äußeren Anordnung, iteriert .aux[] dann über die die aux Anordnung von jedem Knoten und .def druckt ihre .def Eigenschaft

erhalten Sie folgende Ausgabe:.

"I want this" 

Wenn Sie die doppelten Anführungszeichen, um loszuwerden passieren -r (--raw) zu jq:

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

Ausgang:

I want this 
+0

Oh, ich sehe, Sie sind bereits mit '-r' in der Frage . Wie auch immer, es tut nicht weh! :) – hek2mgl