Latihan - Format ekspor JSON
Dokumentasi untuk struktur latihan dalam ekspor JSON
Terakhir diperbarui: 31 Oktober 2026
Di halaman ini
Ekspor JSON menyimpan latihan di array workouts.
Versi Ekspor
Health Auto Export mendukung dua versi ekspor latihan:
- Versi 2 (Direkomendasikan): Format yang ditingkatkan dengan metadata dan data terstruktur yang lebih terperinci
- Versi 1 (Lama): Format lama yang dipertahankan untuk kompatibilitas dengan alur kerja yang ada
Latihan Versi 2
Versi 2 mencakup bidang wajib berikut dan data opsional. Contoh dengan Lokalkan Satuan nonaktif; mengaktifkannya dapat mengubah label satuan dalam seri metrik.
Struktur dasar
{
"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
}
Bidang wajib
id(String): Pengenal unik untuk latihanname(String): Nama jenis latihan (mis. "Running", "Cycling", "Swimming")start(Date): Waktu mulai latihan dalam formatyyyy-MM-dd HH:mm:ss Zend(Date): Waktu akhir latihan dalam formatyyyy-MM-dd HH:mm:ss Zduration(Number): Durasi latihan dalam detik
Bidang opsional
Bidang opsional bergantung pada data yang tersedia dan pilihan ekspor Anda:
Sumber perekaman
{
"source": {
"name": "Workout App",
"identifier": "com.example.workouts"
}
}
source(Object): Aplikasi atau perangkat yang merekam latihan; dengan nama dan pengenal aplikasi. Pembacaan metrik individual memiliki string sumber terpisah dan dapat berasal dari aplikasi atau perangkat lain.
Informasi lokasi
{
"location": "Outdoor",
"isIndoor": false
}
location(String): Salah satu dari"Indoor","Outdoor","Pool","Open Water"isIndoor(Boolean): Apakah latihan dilakukan di dalam ruangan
Energi dan intensitas
{
"activeEnergyBurned": {
"qty": 350,
"units": "kcal"
},
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"intensity": {
"qty": 8.5,
"units": "kcal/hr\u00b7kg"
}
}
activeEnergyBurned(Object): Kalori aktif yang dibakar selama latihantotalEnergy(Object): Total kalori yang dibakar (aktif + istirahat)intensity(Object): Nilai metabolic equivalent of task (MET)
Jarak dan kecepatan
{
"distance": {
"qty": 3.5,
"units": "mi"
}
}
distance(Object): Total jarak yang ditempuhspeed(Object): Kecepatan rata-rata yang dihitung dari jarak dan durasiavgSpeed(Object): Kecepatan rata-rata sepanjang latihanmaxSpeed(Object): Kecepatan maksimum yang dicapai
Setiap objek berisi qty dan units.
Elevasi
{
"elevationUp": {
"qty": 500,
"units": "ft"
},
"elevationDown": {
"qty": 450,
"units": "ft"
}
}
elevationUp(Object): Total elevasi yang diperolehelevationDown(Object): Total elevasi yang hilang
Satuan: "ft" (kaki) atau "m" (meter)
Data lingkungan
{
"temperature": {
"qty": 72,
"units": "degF"
},
"humidity": {
"qty": 65,
"units": "%"
}
}
temperature(Object): Suhu lingkungan selama latihanhumidity(Object): Persentase kelembapan relatif
Satuan suhu: "degF" (Fahrenheit) atau "degC" (Celsius)
Bidang khusus renang
{
"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): Panjang setiap putaranstrokeStyle(String): Salah satu dari:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): Skor efisiensi renangsalinity(String):"Fresh Water"atau"Salt Water"totalSwimmingStrokeCount(Object): Total jumlah kayuhanswimCadence(Object): Kayuhan per menit
Data langkah dan kadens
{
"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): Array pengukuran jumlah langkah dari waktu ke waktustepCadence(Object): Langkah per menitflightsClimbed(Object): Jumlah lantai tangga yang dinaiki
Data denyut jantung
{
"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): Ringkasan denyut jantung min, rata-rata, dan maks selama latihanmaxHeartRate(Object): Denyut jantung maksimum selama latihanavgHeartRate(Object): Denyut jantung rata-rata selama latihanheartRateData(Array): Pengukuran terperinci dari latihan; berakhir saat latihan berakhirheartRateRecovery(Array): Pengukuran terpisah dari dua menit segera setelah latihan berakhir
Ringkasan denyut jantung menggunakan nilai latihan yang direkam jika tersedia; jika tidak, kembali ke pembacaan denyut jantung latihan. Pembacaan yang diekspor mencakup pengukuran yang diambil selama jeda; sehingga puncak dan rata-ratanya dapat berbeda dari ringkasan.
Array data deret waktu
Saat "Sertakan Metrik Latihan" diaktifkan, banyak metrik dapat disertakan sebagai array deret waktu:
{
"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"
}
]
}
Struktur QuantityData:
date(Date): Stempel waktu pengukuranqty(Number): Nilai kuantitasunits(String): Satuan pengukuransource(String, opsional): Perangkat atau aplikasi sumber data
Struktur HeartRateData:
date(Date): Stempel waktu pengukuranMin(Number): Denyut jantung minimumAvg(Number): Denyut jantung rata-rataMax(Number): Denyut jantung maksimumunits(String): Satuan (count/minsaat Lokalkan Satuan nonaktif)source(String, opsional): Perangkat atau aplikasi sumber data
Data rute
Saat "Sertakan Data Rute" diaktifkan dan latihan memiliki 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
}
]
}
Bidang lokasi:
latitude(Number): Koordinat lintang GPSlongitude(Number): Koordinat bujur GPSaltitude(Number): Ketinggian dalam metercourse(Number): Arah gerakan dalam derajat (0-360)courseAccuracy(Number): Akurasi pengukuran arah dalam derajathorizontalAccuracy(Number): Akurasi posisi horizontal dalam meterverticalAccuracy(Number): Akurasi posisi vertikal dalam metertimestamp(Date): Saat lokasi direkamspeed(Number): Kecepatan dalam meter/detikspeedAccuracy(Number): Akurasi pengukuran kecepatan dalam m/s
Metadata
{
"metadata": {
"customField": {
"label": "value",
"quantity": 123
},
"anotherField": [
1,
2,
3
]
}
}
metadata(Object): Metadata kustom tambahan yang terkait dengan latihan
Peristiwa, aktivitas, dan split
Ekspor JSON dan Markdown Versi 2 dapat mencakup events, segments, laps, dan activities yang direkam aplikasi latihan. Ini tersedia bahkan saat Sertakan Metrik Latihan nonaktif. CSV dan GPX tidak mencakup catatan ini.
Saat Sertakan Metrik Latihan aktif dan metrik terkait dipilih, interval juga dapat mencakup jarak, energi aktif, ringkasan denyut jantung, dan tempo atau kecepatan durasi aktif. Nilai membedakan pengukuran yang direkam dari perkiraan; nilai yang tidak tersedia dihilangkan.
Saat jarak dipilih, splits dapat mencakup perkiraan split kilometer dan mil. Mereka dapat berbeda dari split aplikasi perekaman dan split terakhir ditandai sebagian jika lebih pendek dari jarak target. Pembacaan jarak yang hilang atau jenis latihan yang tidak didukung dapat mencegah perhitungan split.
Skor upaya latihan
Ekspor JSON dan Markdown Versi 2 dapat mencakup nilai Skor Upaya Latihan (effortScore) dan Skor Upaya Latihan Perkiraan (estimatedEffortScore) yang dipilih. Masing-masing adalah objek yang berisi qty dan units: "appleEffortScore".
Skor memerlukan iOS 18 atau lebih baru dan akses ke data terkait di Apple Health. Skor seluruh-latihan dan aktivitas terpisah. Independen dari Pengelompokan Waktu dan Sertakan Metrik Latihan; CSV tidak mencakupnya.
Di Jelajahi → Latihan, buka halaman ekspor daftar atau pengaturan ekspor Versi 2 latihan, lalu gunakan Pilih Bidang Ekspor untuk memilih skor upaya sebelum mengekspor.
Pengelompokan Waktu Metrik Latihan
Saat menggunakan Versi Ekspor 2 dan "Sertakan Metrik Latihan" diaktifkan, Anda dapat mengontrol tingkat detail data deret waktu:
- Menit: Mengelompokkan metrik latihan menurut menit jam. Menit pertama dan terakhir dapat mencakup beberapa detik segera sebelum latihan dimulai atau setelah berakhir.
- Detik: Mengelompokkan metrik latihan menurut detik jam; setiap stempel waktu menandai awal detiknya. Detik pertama dan terakhir dapat mencakup pecahan detik tepat di luar latihan. File lebih besar daripada pengelompokan menit.
Energi aktif dan istirahat menggunakan total gabungan yang sama dengan metrik latihan lain dalam setiap kelompok waktu. Pembacaan dari beberapa perangkat atau aplikasi disertakan bersama.
Latihan Versi 1 (Lama)
Versi 1 menggunakan struktur yang lebih sederhana. Versi 2 direkomendasikan untuk ekspor baru.
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": "bpm"
}
],
"route": [
{
"lat": 37.7749,
"lon": -122.4194,
"altitude": 50.5,
"timestamp": "2024-02-06 07:00:00 -0800"
}
]
}