2017-08-08 5 views
0

Parsing folgenden für Schlüssel, die zipcodes haben == 73707802. Zum Beispiel müssen Sie nach Zustand Schlüssel suchen und Namen wo eine der Postleitzahlen 73707802.So wenn ich für 73707802 suchen, es sollten alle Namen und Schlüssel (Schlüsselname zipcode) returnjq Parsing für Elemente aus Sub-Array

12 abc 73707802 
32 cde 73707802 
99 xyz 73707802 

Vielen Dank im Voraus ..

#
{ 
    "states": [ 
    { 
     "key": "12", 
     "name": "abc", 
     "city": { 
     "zipcodes": [ 
      73707802, 
      71444504, 
      72646331, 
      73707802 
     ] 
     } 
    }, 
    { 
     "key": "32", 
     "name": "cde", 
     "city": { 
     "zipcodes": [ 
      71444504, 
      72646331, 
      73707802 
     ] 
     } 
    }, 
    { 
     "key": "99", 
     "name": "xyz", 
     "city": { 
     "zipcodes": [ 
      72754781, 
      71444504, 
      72646331, 
      73707802 
     ] 
     } 
    } 
    ] 
} 
#

Antwort

1

Hier ist eine Lösung, die dieverwendetund --arg Optionen mit wählen Sie und Index.

.states[] 
| select(.city.zipcodes | index($zip|tonumber)) 
| "\(.key) \(.name) \($zip)" 

Beachten Sie, dass in Ihrem Beispiel Sie zeigen nur die Zip Sie gesucht haben, aber wenn Sie andere zipcodes wollen Sie auch gezeigt werden, können das endgültige Format-String ändern.

Wenn Sie den Filter oben in filter.jq setzen und Ihre Daten sind in data.json können Sie es wie folgt ausführen:

$ jq -r --arg zip 73707802 -f filter.jq data.json 
12 abc 73707802 
32 cde 73707802 
99 xyz 73707802 
+0

viel dafür danken .. Eigentlich ist diese in einem Perl-Skript verwenden müssen, so war Suche nach einem einzigen jq-Befehl. –