使用 jq 将两个数组合并为一个对象
Merge two arrays into a single object with jq
我正在尝试使用 jq 将 NOAA 数据馈送解析为我需要的值:
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
运算符中,但我一直无法弄清楚。
是的,map
是个不错的选择。这里的关键是将它与 transpose/0
一起使用,它可以像 "zip" 函数一样使用:
[.time.startPeriodName, .data.weather]
| transpose
| map( {(.[0]): .[1]})
输出开始如下:
[
{
"Today": "Mostly Sunny"
},
{
"Tonight": "Mostly Cloudy"
},
...
因此,要生成单个 JSON 对象,只需将 add
过滤器添加到管道即可。
我正在尝试使用 jq 将 NOAA 数据馈送解析为我需要的值:
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
运算符中,但我一直无法弄清楚。
是的,map
是个不错的选择。这里的关键是将它与 transpose/0
一起使用,它可以像 "zip" 函数一样使用:
[.time.startPeriodName, .data.weather]
| transpose
| map( {(.[0]): .[1]})
输出开始如下:
[
{
"Today": "Mostly Sunny"
},
{
"Tonight": "Mostly Cloudy"
},
...
因此,要生成单个 JSON 对象,只需将 add
过滤器添加到管道即可。