jq:从前 N 个元素中获取特定的重复键值
jq: grab specific repeating key-value from first N elements
我正在尝试解析 https://api.weather.gov/gridpoints/PHI/47,91/forecast/hourly,取得了一定的成功。
{
"number": 1,
"name": "",
"startTime": "2020-12-16T13:00:00-05:00",
"endTime": "2020-12-16T14:00:00-05:00",
"isDaytime": true,
"temperature": 30,
"temperatureUnit": "F",
"temperatureTrend": null,
"windSpeed": "15 mph",
"windDirection": "NE",
"icon": "https://api.weather.gov/icons/land/day/snow,40?size=small",
"shortForecast": "Chance Light Snow",
"detailedForecast": ""
}
我从 jq '.properties.periods[0]'
开始获取第一个元素,与 jq '.properties.periods[0].shortForecast'
一起工作,我发现 jq '.properties.periods[0,1,2,3]'
获取数组中的前 4 个元素。
但是,如果我尝试 jq '.properties.periods[:3]'
,我 运行 会遇到语法错误
jq: error: syntax error, unexpected '['
我认为 shorthand 代表 0-3。
此外,我只想要(相同,重复)每个元素的特定 K/V 对(例如:shortForecast
、temperature
等),但我还没有能够弄清楚如何将它们组合成一个 jq
语句。
那么如何从数组的前 X 个元素中获取特定值呢? (我真的不需要键,只需要值。)
奖励:将每个元素的所有值都放在一行中会很棒。
样本:
"2020-12-16T14:00:00-05:00" 30 "Chance Light Snow"
"2020-12-16T15:00:00-05:00" 30 "Snow"
"2020-12-16T16:00:00-05:00" 29 "Heavy Snow"
.properties.periods[:3]
评估为三个项目的数组,而 .properties.periods[0,1,2]
产生一个项目。所以后者的缩写是:
.properties.periods[:3][]
选择
有很多可能性,例如在一行中获取一组特定的键值对:
jq -c '.properties.periods[:3][]
| {shortForecast, temperature}' input.json
到 select 只是 CSV 格式的值:
.properties.periods[:3][]
| {shortForecast, temperature}
| [.[]]
| @csv
您可能想改用 @tsv
,或 join(" ")
,或 ....
奖金
要按照给出的顺序获取所有值,您可以简单地省略 selection 行:| {....}
但是,那不会那么健壮。以下会更安全:
.properties.periods[:3]
| (.[0] | keys_unsorted) as $keys
| .[]
| [.[$keys[]]]
| @tsv
我正在尝试解析 https://api.weather.gov/gridpoints/PHI/47,91/forecast/hourly,取得了一定的成功。
{
"number": 1,
"name": "",
"startTime": "2020-12-16T13:00:00-05:00",
"endTime": "2020-12-16T14:00:00-05:00",
"isDaytime": true,
"temperature": 30,
"temperatureUnit": "F",
"temperatureTrend": null,
"windSpeed": "15 mph",
"windDirection": "NE",
"icon": "https://api.weather.gov/icons/land/day/snow,40?size=small",
"shortForecast": "Chance Light Snow",
"detailedForecast": ""
}
我从 jq '.properties.periods[0]'
开始获取第一个元素,与 jq '.properties.periods[0].shortForecast'
一起工作,我发现 jq '.properties.periods[0,1,2,3]'
获取数组中的前 4 个元素。
但是,如果我尝试 jq '.properties.periods[:3]'
jq: error: syntax error, unexpected '['
我认为 shorthand 代表 0-3。
此外,我只想要(相同,重复)每个元素的特定 K/V 对(例如:shortForecast
、temperature
等),但我还没有能够弄清楚如何将它们组合成一个 jq
语句。
那么如何从数组的前 X 个元素中获取特定值呢? (我真的不需要键,只需要值。)
奖励:将每个元素的所有值都放在一行中会很棒。
样本:
"2020-12-16T14:00:00-05:00" 30 "Chance Light Snow"
"2020-12-16T15:00:00-05:00" 30 "Snow"
"2020-12-16T16:00:00-05:00" 29 "Heavy Snow"
.properties.periods[:3]
评估为三个项目的数组,而 .properties.periods[0,1,2]
产生一个项目。所以后者的缩写是:
.properties.periods[:3][]
选择
有很多可能性,例如在一行中获取一组特定的键值对:
jq -c '.properties.periods[:3][]
| {shortForecast, temperature}' input.json
到 select 只是 CSV 格式的值:
.properties.periods[:3][]
| {shortForecast, temperature}
| [.[]]
| @csv
您可能想改用 @tsv
,或 join(" ")
,或 ....
奖金
要按照给出的顺序获取所有值,您可以简单地省略 selection 行:| {....}
但是,那不会那么健壮。以下会更安全:
.properties.periods[:3]
| (.[0] | keys_unsorted) as $keys
| .[]
| [.[$keys[]]]
| @tsv