2017-01-05 2 views
0

jq를 사용하여 일부 json에서 데이터를 추출하려고합니다. 이미 추출해야하는 데이터의 마지막 레벨까지 가져 왔지만, 완전히 끝내야했습니다. 데이터의이 부분이 어떻게 포맷되는지 계속하는 방법.jq - 별도의 배열에서 키와 값을 결합합니다.

예가 될 것이다 :

{ 
    "values": [ 
    [ 
     1483633677, 
     42 
    ] 
    ], 
    "columns": [ 
    "time", 
    "count_value" 
    ], 
    "name": "response_time_error" 
} 
I가 특정 열에 대해 단지 값을 추출 할 것이다

(예 count_value) 및 I이 특정 경우 [-1]를 사용하여 추출하지만 할 앞으로 변경 될 경우 이름을 기준으로 열을 선택하려고합니다.

+0

: 당신이 정보를 오류 메시지를 인쇄 할 경우

jq --arg col count_value ' (.columns | index($col)) as $ix | if $ix then .values[][$ix] else empty end' input.json 

는 다음과 같은 뭔가 empty 교체 : 여기 이렇게하는 방법의 그림입니다 필수 문자열 값. 히트 노트를 얻을 때 색인과 응답은 [색인] 값입니다. –

+0

배열을 반복하는 방법에 대한 예제가 많이 있습니다. http://stackoverflow.com/questions/8489288/how-to-loop-through-json-array –

답변

1

하나의 값만 추출하고 배열은 항상 서로 일치하므로 columns 배열에서 해당 인덱스를 찾은 다음 values 배열에 해당 인덱스를 사용할 수 있습니다.

values은 그 값을 가진 행의 배열입니다. 당신이 출력 선택한 열이있는 모든 행의 값을 원하는 가정 : 지정된 열 이름이 .columns에 존재하지 않는

$ jq --arg col 'count_value' '.values[][.columns | index($col)]' input.json 
1

경우, 제프의 필터는 다소 모호한 오류 메시지와 함께 실패합니다. 따라서 열 이름이 있는지 여부를 확인하는 것이 좋습니다. 그래서의 열 배열과 테스트를 반복

error("specified column name, \($col), not found") 
관련 문제