2015-12-31 3 views
13

olan dizin dizi Can şu şekildedir:jq: Ben ("myfile" diye adlandıracağız) bir dosyaya şu var dize

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

Ben [ olmadan bunu ayrıştırmak ve ] edebilirsiniz:

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

ama [ ve ] ile alıyorum:

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

jq kullanarak [ ve ] ile nasıl baş edebilirim? . (Sanırım farklı bir araç ile onları ayrıştırmak eminim ama JQ doğru kullanımını öğrenmek isteyen

cevap

26

Olmalıdır: Dış dizinin üzerinde

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

.[] yinelediğinden .aux[] sonra üzerinde dolaşır aux her düğümün dizi ve .def basar bunların .def özelliği

çıktısı verir.

"I want this" 

çift tırnak kurtulmak istiyorsanız geçmesi -r (--raw) jq için:

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

Çıktı:

I want this 
+0

Oh, zaten söz konusu '-r' kullandıklarını görmek . Her neyse, acımadı! :) – hek2mgl