Тренування — формат експорту 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» можна керувати деталізацією часових рядів:

  • Minutes — групування показників тренування за хвилинними інтервалами
  • Seconds — групування за секундними інтервалами (детальніше, більший розмір файлу)

Поради

  • Include Route Data: увімкніть цю опцію, щоб отримати дані GPS-маршруту для тренувань на вулиці
  • Include Workout Metrics: увімкніть, щоб отримати детальні часові ряди для показників на кшталт пульсу, потужності та каденсу
  • Export Version: використовуйте версію 2 для найповнішої структури даних
  • GPX Export: дані маршруту також можна експортувати окремими файлами GPX для використання в картографічних застосунках

Пов’язана документація