2016-12-08 9 views
1

Ich versuche jq zu verwenden, um ein NOAA Daten fließen in nur die Werte zu analysieren, ich brauche:Zusammenführen von zwei Arrays zu einem einzigen Objekt mit jq

http://forecast.weather.gov/MapClick.php?FcstType=json&lat=39.56&lon=-104.85

Ich bin in der Lage zu (separat) Extrakt die beiden Arrays ich bin auf der Suche zu kombinieren:

$ cat noaa.json | jq .time.startPeriodName 
[ 
    "Today", 
    "Tonight", 
    "Friday", 
    "Friday Night", 
    "Saturday", 
    "Saturday Night", 
    "Sunday", 
    "Sunday Night", 
    "Monday", 
    "Monday Night", 
    "Tuesday", 
    "Tuesday Night", 
    "Wednesday" 
] 

$ cat noaa.json | jq .data.weather 
[ 
    "Mostly Sunny", 
    "Mostly Cloudy", 
    "Mostly Sunny", 
    "Partly Cloudy", 
    "Slight Chance Showers", 
    "Slight Chance Snow Showers", 
    "Slight Chance Snow Showers then Mostly Sunny", 
    "Mostly Clear", 
    "Mostly Sunny", 
    "Partly Cloudy", 
    "Mostly Sunny", 
    "Partly Cloudy", 
    "Mostly Sunny" 
] 

ich mag würde die beiden Arrays zu einem einzigen Objekt wie folgt kombinieren:

{ 
    "Today": "Mostly Sunny", 
    "Tonight": "Mostly Cloudy", 
    ... 
    "Wednesday": "Mostly Sunny" 
} 

Ich wäre dankbar, wenn mir jemand in die richtige Richtung zeigen könnte. Ich fühle mich wie die Antwort ist wahrscheinlich in der map Betreiber, aber ich konnte es nicht herausfinden.

Antwort

5

Ja, map ist ein guter Weg zu gehen. Der Schlüssel hier ist, es zu benutzen mit transpose/0, die verwendet werden kann, als ob es sich um eine „zip“ -Funktion waren:

[.time.startPeriodName, .data.weather] 
| transpose 
| map({(.[0]): .[1]}) 

Die Ausgabe beginnt wie folgt:

[ 
    { 
    "Today": "Mostly Sunny" 
    }, 
    { 
    "Tonight": "Mostly Cloudy" 
    }, 
    ... 

Also, eine einzige zu produzieren JSON-Objekt, fügen Sie einfach den Filter add zur Pipeline hinzu.

+0

Dies ist hilfreich. Gibt es eine Möglichkeit, "transponieren" und "abbilden" zu können, so dass ich ein einzelnes Objekt anstelle eines Arrays von Objekten bekomme? oder vielleicht eine andere Transformation, die das resultierende Array in ein einzelnes Objekt zusammenführen kann? – Scott

+0

Ah, ich habe '| hinzugefügt add 'bis zum Ende und bekam, was ich wollte. – Scott

+0

Hier ist ein Beispiel, das auf einen Pfad verweist, um zum ursprünglichen Array zu gelangen. 'jq" .results [0] .result.tag | [.classes, .probs] | transponieren | map ({(. [0]):. [1]}) | add "' myinput.txt – BSalita

Verwandte Themen