2016-08-03 15 views
3

Ich habe versucht, jq zu verwenden, um eine JSON-Datei zu analysieren, die von der AWS CLI zurückgegeben wird, aber ich bin mit dem Problem des Verweises auf ein Array, das die Indexnummer verwendet, festgefahren. Ich muss dies tun, weil ich eine Textdatei exportieren möchte, die die Sicherheitsgruppen in einem bestimmten Format beschreibt, einschließlich aller eingehenden und ausgehenden Regeln.Wie kann ich Integer als Argument in jq setzen?

for ((i=1; i<=groupCount; i++)) ; 
do 
    echo $i 
    echo $(echo "$input" | jq --arg i $i '.SecurityGroups[$i]') 
done 

Dies gibt einen Fehler zurück:

1 
jq: error (at <stdin>:189): Cannot index array with string "1" 

2 
jq: error (at <stdin>:189): Cannot index array with string "2" 

3 
jq: error (at <stdin>:189): Cannot index array with string "3" 

Gibt es eine Möglichkeit, um dieses?

Antwort

4

Sie müssten entweder die Befehlszeile arg --argjson oder fromjson Filter verwenden, um das Argument in eine Zahl zu konvertieren. Arrays können nur durch Ints indexiert werden und die Eingabe --arg behält die Eingabe als String bei.

$ jq --argjson i "$i" '.SecurityGroups[$i]' 
$ jq --arg i "$i" '.SecurityGroups[$i|fromjson]' 
+1

Beachten Sie, dass Sie auch 'tonumber' anstelle von' fromjson' verwenden könnten. –