Тренировки — формат экспорта 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 Z
  • end (Date): время окончания в формате yyyy-MM-dd HH:mm:ss Z
  • duration (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): широта GPS
  • longitude (Number): долгота GPS
  • altitude (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-файлами для картографических приложений

См. также