2017-01-05 2 views
0

Ich versuche, Daten aus einigen JSON mit JQ zu extrahieren - Ich habe es bereits auf die letzte Ebene der Daten, die ich extrahieren müssen, aber ich bin völlig ratlos im Hinblick auf wie man damit vorgeht, wie dieser Teil der Daten formatiert wird. nur den Wert für eine bestimmte Spalte (zB count_value) und ich kann es extrahieren extrahieren, indem Sie [-1] in diesem speziellen Falljq - kombinieren Sie Schlüssel und Wert unter separaten Arrays

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

Ich möchte, aber ich:

Ein Beispiel wäre, Ich möchte die Spalte nach ihrem Namen auswählen, falls sie sich in der Zukunft ändert.

+0

So durchläuft die Spalten-Array und Test für die erforderlicher Zeichenfolgenwert Wenn Sie eine Treffernotiz erhalten, ist der Index und Ihre Antwort Werte [Index]. –

+0

Viele Beispiele, wie man Array hier iterieren kann: http://stackoverflow.com/questions/8489288/how-to-loop-through-json-array –

Antwort

1

Wenn Sie nur einen einzelnen Wert extrahieren und die Arrays immer übereinstimmen, können Sie den Index im Array columns finden und diesen Index dann in das Array values verwenden.

Es scheint wie values ist ein Array von Zeilen mit diesen Werten. Vorausgesetzt, dass Sie die Werte aller Zeilen mit der ausgewählten Spalte ausgegeben werden sollen:

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

Wenn der angegebene Spaltenname in .columns nicht vorhanden ist, dann Jeffs Filter mit einer eher obskuren Fehlermeldung fehl. Es kann daher besser sein, zu überprüfen, ob der Spaltenname gefunden wurde. Hier ist ein Beispiel dafür, wie dies zu tun:

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

Wenn Sie eine informative Fehlermeldung gedruckt werden soll, dann ersetzen empty mit so etwas wie:

error("specified column name, \($col), not found") 
Verwandte Themen