2016-08-30 22 views
9

mam wyjście JSON następująco:Wyciąg konkretne pole z wyjściem JSON za pomocą JQ

{ 
    "example": { 
    "sub-example": [ 
     { 
     "name": "123-345" 
     "tag" : 100, 
     }, 
     { 
     "name": "234-456" 
     "tag" : 100, 
     }, 
     { 
     "name": "4a7-a07a5" 
     "tag" : 100, 
     } 
    ] 
    } 
} 

Chcę wyodrębnić wartości trzech pól „Nazwa” i przechowywać go w trzech zmiennych.

Próbowałem cat json_file | jq '.["example.sub-example.name"]', aby wyodrębnić wartość pola "nazwa", ale to nie działa.

Czy ktoś może mi powiedzieć, jak to osiągnąć, używając jq (lub innej metody)?

Odpowiedz

11

Jeśli chcesz tylko wyodrębnić pola name, polecenie, którego szukasz, to jq '.example."sub-example" | .[] | .name'. Jeśli chcesz zachować nazwy w tablicy, zawiń całe wyrażenie jq w nawiasach kwadratowych.

Ostrzegam jednak, że Twój przykładowy JSON ma błąd składni. Jeśli używasz tego do testowania, nie zadziała; to wykorzystać tutaj:

{ 
    "example": { 
    "sub-example": [ 
     { 
     "name": "123-345", 
     "tag" : 100 
     }, 
     { 
     "name": "234-456", 
     "tag" : 100 
     }, 
     { 
     "name": "4a7-a07a5", 
     "tag" : 100 
     } 
    ] 
    } 
} 
+0

Dziękuję za sugestię. Jednak gdy wykonuję test kotów | Podprzykład jQ '.example. "| . [] | .name "Otrzymuję komunikat o błędzie: błąd: błąd składni, nieoczekiwany QQSTRING_START, oczekiwanie IDENT .example." pod-przykład "| . [] | .name ^ ^ 1 błąd kompilacji (z^wskazuje kropkę po jq '.example) – rihabmanzoor

+0

Czy używasz najnowszej wersji 'jq'? To działało dobrze na moim systemie. Używam wersji 1.5 (możesz sprawdzić za pomocą 'jq --version'). – aaaaaa123456789

+0

To jest 1.3 (pobrałem go przez apt-get install jq). Czy jest jakiś inny sposób na uzyskanie najnowszej wersji? Korzystam z serwera Ubuntu 14.04. – rihabmanzoor

6

W jq 1.3, można użyć filtra:

.example["sub-example"] | .[] | .name 

lub więcej zwięźle:

.example["sub-example"][].name 

Są oczywiście również pracować z nowszych wersjach JQ jak dobrze.

+0

dziękuję za sugestię! +1 – rihabmanzoor

Powiązane problemy