Тренировки — формат экспорта JSON
Структура тренировок в JSON-экспорте
Last updated: April 5, 2026
На этой странице
Тренировки
Данные о тренировках включают все сеансы активности, записанные в Apple Health: бег, велосипед, плавание, силовые тренировки и другие. В JSON-экспорте тренировки хранятся в массиве workouts.
Версии экспорта
Health Auto Export поддерживает два варианта экспорта тренировок:
- Версия 2 (рекомендуется): расширенный формат с более подробными метаданными и структурированными данными
- Версия 1 (устаревший): старый формат для совместимости с существующими сценариями
Тренировки, версия 2
Версия 2 задаёт полную структуру: необязательные поля добавляются только при наличии данных.
Базовая структура
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Running",
"start": "2024-02-06 07:00:00 -0800",
"end": "2024-02-06 07:30:00 -0800",
"duration": 1800
}
Обязательные поля
id(String): уникальный идентификатор тренировкиname(String): название типа тренировки (например"Running","Cycling","Swimming")start(Date): время начала в форматеyyyy-MM-dd HH:mm:ss Zend(Date): время окончания в форматеyyyy-MM-dd HH:mm:ss Zduration(Number): длительность тренировки в секундах
Необязательные поля
Перечисленные ниже поля присутствуют только если для них есть данные:
Сведения о месте
{
"location": "Outdoor",
"isIndoor": false
}
location(String): одно из значений"Indoor","Outdoor","Pool","Open Water"isIndoor(Boolean): выполнялась ли тренировка в помещении
Энергия и интенсивность
{
"activeEnergyBurned": {
"qty": 350,
"units": "kcal"
},
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"intensity": {
"qty": 8.5,
"units": "MET"
}
}
activeEnergyBurned(Object): активные калории за тренировкуtotalEnergy(Object): всего калорий (активные + в покое)intensity(Object): метаболический эквивалент задачи (MET)
Дистанция и скорость
{
"distance": {
"qty": 3.5,
"units": "mi"
},
"speed": {
"qty": 7.0,
"units": "mph"
},
"avgSpeed": {
"qty": 7.0,
"units": "mph"
},
"maxSpeed": {
"qty": 8.5,
"units": "mph"
}
}
distance(Object): пройденная дистанцияspeed(Object): текущая или средняя скоростьavgSpeed(Object): средняя скорость за тренировкуmaxSpeed(Object): максимальная скорость
Единицы:
- Дистанция:
"mi"(мили) или"km"(километры) - Скорость:
"mph"(мили в час) или"kmph"(километры в час)
Набор и сброс высоты
{
"elevationUp": {
"qty": 500,
"units": "ft"
},
"elevationDown": {
"qty": 450,
"units": "ft"
}
}
elevationUp(Object): суммарный набор высотыelevationDown(Object): суммарный сброс высоты
Единицы: "ft" (футы) или "m" (метры)
Условия окружающей среды
{
"temperature": {
"qty": 72,
"units": "degF"
},
"humidity": {
"qty": 65,
"units": "%"
}
}
temperature(Object): температура окружающей среды во время тренировкиhumidity(Object): относительная влажность в процентах
Единицы температуры: "degF" (Фаренгейт) или "degC" (Цельсий)
Поля, специфичные для плавания
{
"lapLength": {
"qty": 0.025,
"units": "mi"
},
"strokeStyle": "Freestyle",
"swolfScore": 45,
"salinity": "Fresh Water",
"totalSwimmingStrokeCount": {
"qty": 1200,
"units": "count"
},
"swimCadence": {
"qty": 30,
"units": "spm"
}
}
lapLength(Object): длина одного отрезка дорожки (круга)strokeStyle(String): стиль гребка — одно из значений:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): показатель эффективности плавания (SWOLF)salinity(String):"Fresh Water"или"Salt Water"totalSwimmingStrokeCount(Object): общее число гребковswimCadence(Object): гребков в минуту
Шаги и каденс
{
"stepCount": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 5000,
"units": "count",
"source": "Apple Watch"
}
],
"stepCadence": {
"qty": 180,
"units": "spm"
},
"flightsClimbed": {
"qty": 10,
"units": "count"
}
}
stepCount(Array): измерения числа шагов во времениstepCadence(Object): шагов в минутуflightsClimbed(Object): число пройденных пролётов лестницы
Данные о пульсе
{
"heartRate": {
"min": {
"qty": 120,
"units": "bpm"
},
"avg": {
"qty": 150,
"units": "bpm"
},
"max": {
"qty": 175,
"units": "bpm"
}
},
"maxHeartRate": {
"qty": 175,
"units": "bpm"
},
"avgHeartRate": {
"qty": 150,
"units": "bpm"
},
"heartRateData": [
{
"date": "2024-02-06 07:00:00 -0800",
"Min": 120,
"Avg": 150,
"Max": 175,
"units": "bpm",
"source": "Apple Watch"
}
],
"heartRateRecovery": [
{
"date": "2024-02-06 07:30:00 -0800",
"Min": 140,
"Avg": 145,
"Max": 150,
"units": "bpm",
"source": "Apple Watch"
}
]
}
heartRate(Object): сводка с минимальным, средним и максимальным пульсомmaxHeartRate(Object): максимальный пульс за тренировкуavgHeartRate(Object): средний пульс за тренировкуheartRateData(Array): подробные измерения пульса на протяжении тренировкиheartRateRecovery(Array): измерения пульса в период восстановления
Временные ряды (массивы)
Многие метрики могут выводиться как временные ряды, если включена опция «Включить метрики тренировки» (Include Workout Metrics):
{
"activeEnergy": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 50,
"units": "kcal",
"source": "Apple Watch"
}
],
"basalEnergy": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 20,
"units": "kcal",
"source": "Apple Watch"
}
],
"cyclingCadence": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 90,
"units": "rpm",
"source": "Apple Watch"
}
],
"cyclingDistance": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 0.5,
"units": "mi",
"source": "Apple Watch"
}
],
"cyclingPower": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 200,
"units": "W",
"source": "Power Meter"
}
],
"cyclingSpeed": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 18,
"units": "mph",
"source": "Apple Watch"
}
],
"swimDistance": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 25,
"units": "yd",
"source": "Apple Watch"
}
],
"swimStroke": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 20,
"units": "count",
"source": "Apple Watch"
}
],
"walkingAndRunningDistance": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 0.25,
"units": "mi",
"source": "Apple Watch"
}
]
}
Структура QuantityData:
date(Date): метка времени измеренияqty(Number): значение величиныunits(String): единица измеренияsource(String, необязательно): источник данных — устройство или приложение
Структура HeartRateData:
date(Date): метка времени измеренияMin(Number): минимальный пульсAvg(Number): средний пульсMax(Number): максимальный пульсunits(String): единица (обычно"bpm")source(String, необязательно): источник данных — устройство или приложение
Данные маршрута
Если включена опция «Включить данные маршрута» (Include Route Data) и у тренировки есть данные GPS:
{
"route": [
{
"latitude": 37.7749,
"longitude": -122.4194,
"altitude": 50.5,
"course": 45.0,
"courseAccuracy": 5.0,
"horizontalAccuracy": 10.0,
"verticalAccuracy": 15.0,
"timestamp": "2024-02-06 07:00:00 -0800",
"speed": 7.0,
"speedAccuracy": 0.5
}
]
}
Поля местоположения:
latitude(Number): широта GPSlongitude(Number): долгота GPSaltitude(Number): высота в метрахcourse(Number): направление движения в градусах (0–360)courseAccuracy(Number): точность измерения курса в градусахhorizontalAccuracy(Number): точность горизонтального положения в метрахverticalAccuracy(Number): точность вертикального положения в метрахtimestamp(Date): время фиксации точкиspeed(Number): скорость в метрах в секундуspeedAccuracy(Number): точность измерения скорости в м/с
Метаданные
{
"metadata": {
"customField": "value",
"anotherField": 123
}
}
metadata(Object): дополнительные пользовательские метаданные, связанные с тренировкой
Тренировки, версия 1 (устаревший формат)
Версия 1 использует более простую структуру. Для новых экспортов рекомендуется версия 2.
Структура версии 1
{
"name": "Running",
"start": "2024-02-06 07:00:00 -0800",
"end": "2024-02-06 07:30:00 -0800",
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"activeEnergy": {
"qty": 350,
"units": "kcal"
},
"distance": {
"qty": 3.5,
"units": "mi"
},
"heartRateData": [
{
"date": "2024-02-06 07:00:00 -0800",
"qty": 150,
"units": "count"
}
],
"route": [
{
"lat": 37.7749,
"lon": -122.4194,
"altitude": 50.5,
"timestamp": "2024-02-06 07:00:00 -0800"
}
]
}
Группировка метрик тренировки по времени
При версии экспорта 2 и включённой опции «Включить метрики тренировки» (Include Workout Metrics) можно задать детализацию временных рядов:
- Минуты — метрики тренировки группируются по минутным интервалам
- Секунды — по секундным интервалам (подробнее, больше размер файла)
Советы
- Включить данные маршрута (Include Route Data): включите, чтобы получать GPS-маршрут для тренировок на улице
- Включить метрики тренировки (Include Workout Metrics): включите, чтобы получать подробные временные ряды для метрик вроде пульса, мощности и каденса
- Версия экспорта: используйте версию 2 для максимально полной структуры данных
- Экспорт GPX: данные маршрута можно также выгрузить отдельными GPX-файлами для картографических приложений