Latihan — format eksport JSON

Dokumentasi untuk struktur latihan dalam eksport JSON

Last updated: April 5, 2026

Pada halaman ini

Latihan

Data latihan merangkumi semua sesi senaman anda yang direkodkan dalam Apple Health, seperti berlari, berbasikal, berenang, latihan kekuatan dan banyak lagi. Dalam eksport JSON, latihan disimpan dalam tatasusunan workouts.

Versi eksport

Health Auto Export menyokong dua versi eksport latihan:

  • Versi 2 (Disyorkan): Format dipertingkatkan dengan metadata lebih terperinci dan data berstruktur
  • Versi 1 (Legasi): Format lama dikekalkan untuk keserasian dengan aliran kerja sedia ada

Latihan versi 2

Versi 2 menyediakan struktur menyeluruh dengan medan pilihan yang hanya disertakan apabila data tersedia.

Struktur asas

{
  "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
}

Medan wajib

  • id (Rentetan): Pengecam unik untuk latihan
  • name (Rentetan): Nama jenis latihan (cth. "Running", "Cycling", "Swimming")
  • start (Tarikh): Masa mula latihan dalam format yyyy-MM-dd HH:mm:ss Z
  • end (Tarikh): Masa tamat latihan dalam format yyyy-MM-dd HH:mm:ss Z
  • duration (Nombor): Tempoh latihan dalam saat

Medan pilihan

Medan berikut hanya disertakan apabila data tersedia:

Maklumat lokasi

{
  "location": "Outdoor",
  "isIndoor": false
}
  • location (Rentetan): Salah satu daripada "Indoor", "Outdoor", "Pool", "Open Water"
  • isIndoor (Boolean): Sama ada latihan dilakukan dalam bangunan

Tenaga dan keamatan

{
  "activeEnergyBurned": {
    "qty": 350,
    "units": "kcal"
  },
  "totalEnergy": {
    "qty": 450,
    "units": "kcal"
  },
  "intensity": {
    "qty": 8.5,
    "units": "MET"
  }
}
  • activeEnergyBurned (Objek): Kalori aktif terbakar semasa latihan
  • totalEnergy (Objek): Jumlah kalori (aktif + rehat) terbakar
  • intensity (Objek): Nilai setara metabolik tugas (MET)

Jarak dan kelajuan

{
  "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 (Objek): Jumlah jarak diliputi
  • speed (Objek): Kelajuan semasa atau purata
  • avgSpeed (Objek): Purata kelajuan sepanjang latihan
  • maxSpeed (Objek): Kelajuan maksimum dicapai

Unit:

  • Jarak: "mi" (batu) atau "km" (kilometer)
  • Kelajuan: "mph" (batu sejam) atau "kmph" (kilometer sejam)

Ketinggian

{
  "elevationUp": {
    "qty": 500,
    "units": "ft"
  },
  "elevationDown": {
    "qty": 450,
    "units": "ft"
  }
}
  • elevationUp (Objek): Jumlah ketinggian naik
  • elevationDown (Objek): Jumlah ketinggian turun

Unit: "ft" (kaki) atau "m" (meter)

Data persekitaran

{
  "temperature": {
    "qty": 72,
    "units": "degF"
  },
  "humidity": {
    "qty": 65,
    "units": "%"
  }
}
  • temperature (Objek): Suhu persekitaran semasa latihan
  • humidity (Objek): Peratusan kelembapan relatif

Unit suhu: "degF" (Fahrenheit) atau "degC" (Celsius)

Medan khusus berenang

{
  "lapLength": {
    "qty": 0.025,
    "units": "mi"
  },
  "strokeStyle": "Freestyle",
  "swolfScore": 45,
  "salinity": "Fresh Water",
  "totalSwimmingStrokeCount": {
    "qty": 1200,
    "units": "count"
  },
  "swimCadence": {
    "qty": 30,
    "units": "spm"
  }
}
  • lapLength (Objek): Panjang setiap pusingan
  • strokeStyle (Rentetan): Salah satu daripada:
    • "Backstroke"
    • "Breaststroke"
    • "Butterfly"
    • "Freestyle"
    • "Mixed"
    • "Kickboard"
    • "Unknown"
  • swolfScore (Nombor): Skor kecekapan renang
  • salinity (Rentetan): "Fresh Water" atau "Salt Water"
  • totalSwimmingStrokeCount (Objek): Jumlah denyutan
  • swimCadence (Objek): Denyutan per minit

Data langkah dan kaden

{
  "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 (Tatasusunan): Tatasusunan ukuran kiraan langkah mengikut masa
  • stepCadence (Objek): Langkah per minit
  • flightsClimbed (Objek): Bilangan tingkat tangga didaki

Data kadar denyutan jantung

{
  "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 (Objek): Ringkasan min, purata dan maks kadar denyutan jantung
  • maxHeartRate (Objek): Kadar denyutan jantung maksimum semasa latihan
  • avgHeartRate (Objek): Purata kadar denyutan jantung semasa latihan
  • heartRateData (Tatasusunan): Ukuran kadar denyutan jantung terperinci sepanjang latihan
  • heartRateRecovery (Tatasusunan): Ukuran kadar denyutan jantung semasa tempoh pemulihan

Tatasusunan data siri masa

Banyak metrik boleh disertakan sebagai tatasusunan siri masa apabila "Sertakan metrik latihan" didayakan:

{
  "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"
    }
  ]
}

Struktur QuantityData:

  • date (Tarikh): Cap masa ukuran
  • qty (Nombor): Nilai kuantiti
  • units (Rentetan): Unit ukuran
  • source (Rentetan, pilihan): Peranti atau apl sumber data

Struktur HeartRateData:

  • date (Tarikh): Cap masa ukuran
  • Min (Nombor): Kadar denyutan jantung minimum
  • Avg (Nombor): Purata kadar denyutan jantung
  • Max (Nombor): Kadar denyutan jantung maksimum
  • units (Rentetan): Unit (biasanya "bpm")
  • source (Rentetan, pilihan): Peranti atau apl sumber data

Data laluan

Apabila "Sertakan data laluan" didayakan dan latihan mempunyai 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
    }
  ]
}

Medan lokasi:

  • latitude (Nombor): Koordinat latitud GPS
  • longitude (Nombor): Koordinat longitud GPS
  • altitude (Nombor): Ketinggian dalam meter
  • course (Nombor): Arah perjalanan dalam darjah (0–360)
  • courseAccuracy (Nombor): Ketepatan ukuran haluan dalam darjah
  • horizontalAccuracy (Nombor): Ketepatan kedudukan mengufuk dalam meter
  • verticalAccuracy (Nombor): Ketepatan kedudukan menegak dalam meter
  • timestamp (Tarikh): Masa lokasi direkodkan
  • speed (Nombor): Kelajuan dalam meter sesaat
  • speedAccuracy (Nombor): Ketepatan ukuran kelajuan dalam m/s

Metadata

{
  "metadata": {
    "customField": "value",
    "anotherField": 123
  }
}
  • metadata (Objek): Metadata tersuai tambahan dikaitkan dengan latihan

Latihan versi 1 (legasi)

Versi 1 menggunakan struktur lebih mudah. Untuk eksport baharu, Versi 2 disyorkan.

Struktur versi 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"
    }
  ]
}

Pengumpulan masa metrik latihan

Apabila menggunakan Versi eksport 2 dan "Sertakan metrik latihan" didayakan, anda boleh mengawal butiran data siri masa:

  • Minit: Mengumpulkan metrik latihan mengikut selang minit
  • Saat: Mengumpulkan metrik latihan mengikut selang saat (lebih terperinci, saiz fail lebih besar)

Petua

  • Sertakan data laluan: Dayakan pilihan ini untuk mendapatkan maklumat laluan GPS untuk latihan luar
  • Sertakan metrik latihan: Dayakan ini untuk mendapatkan data siri masa terperinci untuk metrik seperti kadar denyutan jantung, kuasa dan kaden
  • Versi eksport: Gunakan Versi 2 untuk struktur data paling menyeluruh
  • Eksport GPX: Data laluan juga boleh dieksport sebagai fail GPX berasingan untuk digunakan dalam apl pemetaan

Dokumentasi berkaitan