2017-01-05 24 views
0

私はjqでいくつかのjsonからデータを抽出しようとしています - 私はすでにデータを抽出する必要がある最後のレベルまで持っていますが、データのこの部分がどのようにフォーマットされるかを進める方法。jq - 別の配列の下でキーと値を結合する

例は次のようになります

{ 
    "values": [ 
    [ 
     1483633677, 
     42 
    ] 
    ], 
    "columns": [ 
    "time", 
    "count_value" 
    ], 
    "name": "response_time_error" 
} 

Iがある列(例えばcount_value)のための値だけを抽出したいと私は、この特定の場合には[-1]を用いてそれを抽出し、私ができます将来変更される場合は、その名前で列を選択する必要があります。

+0

だから、の列の配列とテストを繰り返します必須の文字列値。あなたがヒットノートを取得すると、インデックスとあなたの答えは値[インデックス]です。 –

+0

ここで配列を反復処理する方法の例はたくさんあります:http://stackoverflow.com/questions/8489288/how-to-loop-through-json-array –

答えて

1

1つの値だけを抽出していて、配列が常に互いに対応する場合は、columns配列のインデックスを見つけ、そのインデックスをvalues配列に使用できます。

valuesは、これらの値を持つ行の配列です。出力にしたいと仮定すると、選択した列を持つすべての行の値:指定された列名が.columnsに存在しない場合は

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

、その後、ジェフのフィルタはかなり曖昧なエラーメッセージで失敗します。したがって、列名が見つかるかどうかを確認することが望ましい場合があります。あなたが有益なエラーメッセージが印刷されるようにしたい場合は

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

、その後のようなものでemptyを置き換えます:ここでこれを行う方法の説明図である

error("specified column name, \($col), not found") 
関連する問題