Тренировки - формат экспорта JSON
Документация по структуре тренировок в экспортах JSON
Последнее обновление: 31 октября 2026 г.
На этой странице
Экспорты JSON хранят тренировки в массиве workouts.
Версии экспорта
Health Auto Export поддерживает две версии экспорта тренировок:
- Версия 2 (рекомендуется): расширенный формат с более подробными метаданными и структурированными данными
- Версия 1 (legacy): старый формат, сохранённый для совместимости с существующими рабочими процессами
Тренировки: версия 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): длительность тренировки в секундах
Необязательные поля
Необязательные поля зависят от доступных данных и выбора экспорта:
Источник записи
{
"source": {
"name": "Workout App",
"identifier": "com.example.workouts"
}
}
source(Object): приложение или устройство, записавшее тренировку, с именем и идентификатором приложения. Отдельные показания метрик имеют отдельные строки источника и могут поступать из другого приложения или устройства.
Сведения о местоположении
{
"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": "kcal/hr\u00b7kg"
}
}
activeEnergyBurned(Object): активные калории, сожжённые во время тренировкиtotalEnergy(Object): общие калории (активные + в покое), сожжённыеintensity(Object): значение metabolic equivalent of task (MET)
Дистанция и скорость
{
"distance": {
"qty": 3.5,
"units": "mi"
}
}
distance(Object): общая пройденная дистанцияspeed(Object): средняя скорость, рассчитанная из дистанции и длительностиavgSpeed(Object): средняя скорость на протяжении тренировкиmaxSpeed(Object): максимальная достигнутая скорость
Каждый объект включает qty и units.
Высота
{
"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": "count/min"
}
}
lapLength(Object): длина каждого кругаstrokeStyle(String): одно из:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): оценка эффективности плавания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": "count/min"
},
"flightsClimbed": {
"qty": 10,
"units": "count"
}
}
stepCount(Array): массив измерений числа шагов во времениstepCadence(Object): шаги в минутуflightsClimbed(Object): число пройденных лестничных пролётов
Данные пульса
{
"heartRate": {
"min": {
"qty": 120,
"units": "count/min"
},
"avg": {
"qty": 150,
"units": "count/min"
},
"max": {
"qty": 175,
"units": "count/min"
}
},
"maxHeartRate": {
"qty": 175,
"units": "count/min"
},
"avgHeartRate": {
"qty": 150,
"units": "count/min"
},
"heartRateData": [
{
"date": "2024-02-06 07:00:00 -0800",
"Min": 120,
"Avg": 150,
"Max": 175,
"units": "count/min",
"source": "Apple Watch"
}
],
"heartRateRecovery": [
{
"date": "2024-02-06 07:30:00 -0800",
"Min": 140,
"Avg": 145,
"Max": 150,
"units": "count/min",
"source": "Apple Watch"
}
]
}
heartRate(Object): сводка с мин., средним и макс. пульсом во время тренировкиmaxHeartRate(Object): максимальный пульс во время тренировкиavgHeartRate(Object): средний пульс во время тренировкиheartRateData(Array): подробные измерения с тренировки, заканчивающиеся, когда заканчивается тренировкаheartRateRecovery(Array): отдельные измерения из двух минут сразу после окончания тренировки
Сводный пульс использует записанные значения тренировки, когда доступны, с откатом к показаниям пульса тренировки. Экспортированные показания включают измерения, сделанные во время пауз, поэтому их пики и средние могут отличаться от сводки.
Массивы данных временных рядов
Многие метрики могут включаться как массивы временных рядов, когда включено «Включить показатели тренировки»:
{
"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": "count/min",
"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": "mi/hr",
"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): единица (count/minпри выключенном Локализовать единицы)source(String, необязательно): устройство или приложение источника данных
Данные маршрута
Когда Включить данные маршрута включено и у тренировки есть 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": {
"label": "value",
"quantity": 123
},
"anotherField": [
1,
2,
3
]
}
}
metadata(Object): дополнительные пользовательские метаданные, связанные с тренировкой
События, активности и сплиты
Экспорты JSON и Markdown версии 2 могут включать events, segments, laps и activities, записанные приложением тренировок. Они остаются доступны, когда Включить показатели тренировки выключено. CSV и GPX не включают эти записи.
При включённом Включить показатели тренировки и выбранных соответствующих метриках интервалы могут также включать дистанцию, активную энергию, сводки пульса и темп или скорость активного времени. Значения различают записанные измерения и оценки; недоступные значения опускаются.
При выбранной дистанции splits могут включать оценочные километровые и мильные сплиты. Они могут отличаться от сплитов записывающего приложения, а финальный сплит помечается как частичный, когда короче целевой дистанции. Отсутствующие показания дистанции или неподдерживаемые типы тренировок могут помешать расчёту сплитов.
Оценки усилия тренировки
Экспорты JSON и Markdown версии 2 могут включать выбранные значения Оценка усилий при тренировке (effortScore) и Оценочная оценка усилий при тренировке (estimatedEffortScore). Каждое — объект с qty и units: "appleEffortScore".
Оценки требуют iOS 18 или новее и доступ к соответствующим данным в Apple Health. Оценки всей тренировки и активностей раздельные. Они независимы от Группировка по времени и Включить показатели тренировки; CSV их не включает.
В Обзор → Тренировки откройте лист экспорта списка или настройки экспорта версии 2 тренировки, затем используйте Выберите поля для экспорта, чтобы выбрать оценки усилия перед экспортом.
Группировка по времени метрик тренировок
При использовании экспорта версии 2 и включённом «Включить показатели тренировки» вы можете контролировать детализацию данных временных рядов:
- Минуты: группирует метрики тренировок по минутным меткам часов. Первая и последняя минута могут включать несколько секунд сразу до начала тренировки или сразу после её конца.
- Секунды: группирует метрики тренировок по секундным меткам часов, каждая метка отмечает начало своей секунды. Первая и последняя секунда могут включать долю секунды сразу вне тренировки. Файлы больше, чем при группировке по минутам.
Активная и энергия в покое используют те же комбинированные итоги, что и другие метрики тренировок в каждой временной группе. Показания с нескольких устройств или приложений включаются вместе.
Тренировки: версия 1 (legacy)
Версия 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": "bpm"
}
],
"route": [
{
"lat": 37.7749,
"lon": -122.4194,
"altitude": 50.5,
"timestamp": "2024-02-06 07:00:00 -0800"
}
]
}