Я пытаюсь разобрать 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: ошибка: синтаксическая ошибка, неожиданное '['
который, как я думал, будет сокращением от 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"
Я бегу: jq-1.5-1-a5b5cbe
О, я вижу, где моя синтаксическая ошибка: дополнительная точка между точками и [:3] в .properties.periods.[:3]
.properties.periods[:3]
оценивается как массив из трех элементов, тогда как .properties.periods[0,1,2]
создает детализацию. Таким образом, аббревиатура последнего будет:
.properties.periods[:3][]
Существует множество возможностей, например. чтобы получить определенный набор пар ключ-значение в одной строке:
jq -c '.properties.periods[:3][]
| {shortForecast, temperature}' input.json
Чтобы выбрать только значения в формате CSV:
.properties.periods[:3][]
| {shortForecast, temperature}
| [.[]]
| @csv
Вместо этого вы можете использовать @tsv
, или join(" ")
, или ....
Чтобы получить все значения в том порядке, в котором они даны, вы можете просто опустить строку выбора: | {....}
Однако это было бы не так надежно. Следующее будет безопаснее:
.properties.periods[:3]
| (.[0] | keys_unsorted) as $keys
| .[]
| [.[$keys[]]]
| @tsv
Отлично, спасибо за объяснение. Это дает мне несколько вариантов, с которыми можно повозиться!
Не удается воспроизвести синтаксическую ошибку с JQ 1.6.