2017-10-30 3 views
1

iterieren Könnte jemand bitte unten Warnung erklären?jq: Fehler: Kann nicht über String

Eingabedatei:

{ 
"env": "DC", 
"hosts" : 
[ 
{ 
    "apt_update_last_success": "1495991703", 
    "architecture": "amd64", 
    "hostname": "h1" 
}, 
{ 
    "apt_update_last_success": "1495991703", 
    "architecture": "amd64", 
    "hostname": "h2" 
}, 
{ 
    "apt_update_last_success": "1496045706", 
    "architecture": "amd64", 
    "hostname": "h3" 
}, 
{ 
    "apt_update_last_success": "1496045705", 
    "architecture": "amd64", 
    "hostname": "h4" 
}, 
{ 
    "apt_update_last_success": "1496049305", 
    "architecture": "amd64", 
    "hostname": "h5" 
}, 
{ 
    "apt_update_last_success": "1496049307", 
    "architecture": "amd64", 
    "hostname": "h6" 
} 
] 
} 

der jq Befehl gibt, was erwartet druckt aber auch die Warnung, die ich weiß nicht, warum:

$ jq -r '.[][] | select(.hostname=="h6")' ddd.json 
jq: error: Cannot iterate over string 
{ 
    "apt_update_last_success": "1496049307", 
    "architecture": "amd64", 
    "hostname": "h6" 
} 

mir bitte sagen, wie dies loszuwerden.

danke.

Antwort

0

Das Problem ist in Ihrer Notation .[][]. Ihre Eingabe ist nur ein Objekt aber Sie versuchen, es als "Container" von "Container" .[][] zu präsentieren.

Der richtige Weg ist:

jq '.hosts[] | select(.hostname=="h6")' ddd.json 
{ 
    "apt_update_last_success": "1496049307", 
    "architecture": "amd64", 
    "hostname": "h6" 
} 

Außerdem auf jq1.5 diese jq -r '.[][] | select(.hostname=="h6")' ddd.json nicht das erwartete Objekt zurückgibt, sondern druckt nur jq: error (at jq1:36): Cannot iterate over string ("DC")

+0

@peak „vorsichtig "heißt in diesem Fall nicht" robust " – RomanPerekhrest

+0

@peak, du hast mein Update – RomanPerekhrest

Verwandte Themen