2016-12-08 84 views
1

我試圖使用JQ來解析NOAA數據送入剛值我需要:合併兩個陣列整合到單個對象與JQ

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

我能夠(單獨的)提取物這兩個數組我在尋找結合:

$ 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" 
] 

我想這兩個數組一起合併成一個對象是這樣的:

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

如果有人能指出我正確的方向,我將不勝感激。我覺得答案可能在map運營商,但我一直無法弄清楚。

回答

5

是的,map是一個好方法。這裏的關鍵是要與transpose/0,可好像它是一個「壓縮」功能可用於使用它:

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

輸出開始如下:

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

因此,以生產單一JSON對象,只需將add過濾器添加到流水線。

+0

這很有幫助。有沒有一種方法可以運行'transpose'和'map',這樣我就可以得到一個單獨的對象而不是一個對象數組了?或者可能是另一種可以將這個結果數組合併成單個對象的轉換? – Scott

+0

啊,我加了'|添加到最後,並得到我想要的。 – Scott

+0

下面是一個引用到達初始數組路徑的示例。 'jq「.results [0] .result.tag | [.classes,.probs] |轉置| map({(。[0]):。[1]})| add」'myinput.txt – BSalita