Tréninky - formát exportu JSON
Dokumentace struktury tréninků v JSON exportech
Poslední aktualizace: 31. října 2026
Na této stránce
JSON exporty ukládají tréninky do pole workouts.
Verze exportu
Health Auto Export podporuje dvě verze exportu tréninků:
- Verze 2 (Doporučeno): Vylepšený formát s podrobnějšími metadaty a strukturovanými daty
- Verze 1 (Legacy): Starší formát zachovaný pro kompatibilitu se stávajícími workflow
Tréninky Verze 2
Verze 2 zahrnuje následující povinná pole a volitelná data. Příklady jsou s vypnutým Lokalizovat jednotky; zapnutí může změnit popisky jednotek v metrických řadách.
Základní struktura
{
"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
}
Povinná pole
id(String): Jedinečný identifikátor tréninkuname(String): Název typu tréninku (např. "Running", "Cycling", "Swimming")start(Date): Čas začátku tréninku ve formátuyyyy-MM-dd HH:mm:ss Zend(Date): Čas konce tréninku ve formátuyyyy-MM-dd HH:mm:ss Zduration(Number): Doba trvání tréninku v sekundách
Volitelná pole
Volitelná pole závisí na dostupných datech a vašich volbách exportu:
Zdroj záznamu
{
"source": {
"name": "Workout App",
"identifier": "com.example.workouts"
}
}
source(Object): Aplikace nebo zařízení, které trénink zaznamenalo; s názvem a identifikátorem aplikace. Jednotlivá čtení metrik mají samostatné řetězce zdroje a mohou pocházet z jiné aplikace nebo zařízení.
Informace o místě
{
"location": "Outdoor",
"isIndoor": false
}
location(String): Jedna z"Indoor","Outdoor","Pool","Open Water"isIndoor(Boolean): Zda byl trénink proveden uvnitř
Energie a intenzita
{
"activeEnergyBurned": {
"qty": 350,
"units": "kcal"
},
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"intensity": {
"qty": 8.5,
"units": "kcal/hr\u00b7kg"
}
}
activeEnergyBurned(Object): Aktivní kalorie spálené během tréninkutotalEnergy(Object): Celkové spálené kalorie (aktivní + klidové)intensity(Object): Hodnota metabolického ekvivalentu úkolu (MET)
Vzdálenost a rychlost
{
"distance": {
"qty": 3.5,
"units": "mi"
}
}
distance(Object): Celková ujetá vzdálenostspeed(Object): Průměrná rychlost vypočtená ze vzdálenosti a dobyavgSpeed(Object): Průměrná rychlost během tréninkumaxSpeed(Object): Dosažená maximální rychlost
Každý objekt obsahuje qty a units.
Převýšení
{
"elevationUp": {
"qty": 500,
"units": "ft"
},
"elevationDown": {
"qty": 450,
"units": "ft"
}
}
elevationUp(Object): Celkové získané převýšeníelevationDown(Object): Celkové ztracené převýšení
Jednotky: "ft" (stopy) nebo "m" (metry)
Environmentální data
{
"temperature": {
"qty": 72,
"units": "degF"
},
"humidity": {
"qty": 65,
"units": "%"
}
}
temperature(Object): Teplota okolí během tréninkuhumidity(Object): Relativní vlhkost v procentech
Jednotky teploty: "degF" (Fahrenheit) nebo "degC" (Celsius)
Pole specifická pro plavání
{
"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): Délka každého úsekustrokeStyle(String): Jedna z:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): Skóre efektivity plavánísalinity(String):"Fresh Water"nebo"Salt Water"totalSwimmingStrokeCount(Object): Celkový počet záběrůswimCadence(Object): Záběry za minutu
Data kroků a kadence
{
"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): Pole měření počtu kroků v časestepCadence(Object): Kroky za minutuflightsClimbed(Object): Počet vystoupaných pater
Data tepové frekvence
{
"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): Souhrn min, prům. a max tepové frekvence během tréninkumaxHeartRate(Object): Maximální tepová frekvence během tréninkuavgHeartRate(Object): Průměrná tepová frekvence během tréninkuheartRateData(Array): Podrobná měření z tréninku; končí, když trénink skončíheartRateRecovery(Array): Oddělená měření ze dvou minut ihned po skončení tréninku
Souhrnné tepové frekvence používají zaznamenané hodnoty tréninku, když jsou dostupné; jinak se spoléhají na čtení tepové frekvence tréninku. Exportovaná čtení zahrnují měření během pauz; proto se špičky a průměry mohou lišit od souhrnu.
Pole časových řad
Když je zapnuto „Zahrnout metriky tréninku“, mnoho metrik může být zahrnuto jako pole časových řad:
{
"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"
}
]
}
Struktura QuantityData:
date(Date): Časová značka měřeníqty(Number): Hodnota množstvíunits(String): Měrná jednotkasource(String, volitelné): Zdrojové zařízení nebo aplikace
Struktura HeartRateData:
date(Date): Časová značka měřeníMin(Number): Minimální tepová frekvenceAvg(Number): Průměrná tepová frekvenceMax(Number): Maximální tepová frekvenceunits(String): Jednotka (count/mins vypnutým Lokalizovat jednotky)source(String, volitelné): Zdrojové zařízení nebo aplikace
Data trasy
Když je zapnuto „Zahrnout data trasy“ a trénink má 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
}
]
}
Pole umístění:
latitude(Number): Zeměpisná šířka GPSlongitude(Number): Zeměpisná délka GPSaltitude(Number): Nadmořská výška v metrechcourse(Number): Směr pohybu ve stupních (0–360)courseAccuracy(Number): Přesnost měření směru ve stupníchhorizontalAccuracy(Number): Horizontální přesnost polohy v metrechverticalAccuracy(Number): Vertikální přesnost polohy v metrechtimestamp(Date): Kdy byla poloha zaznamenánaspeed(Number): Rychlost v metrech za sekunduspeedAccuracy(Number): Přesnost měření rychlosti v m/s
Metadata
{
"metadata": {
"customField": {
"label": "value",
"quantity": 123
},
"anotherField": [
1,
2,
3
]
}
}
metadata(Object): Další vlastní metadata spojená s tréninkem
Události, aktivity a úseky
Exporty JSON a Markdown Verze 2 mohou zahrnovat events, segments, laps a activities zaznamenané aplikací tréninku. Ty jsou dostupné i s vypnutým Zahrnout metriky tréninku. CSV a GPX tyto záznamy nezahrnují.
Se zapnutým Zahrnout metriky tréninku a vybranými souvisejícími metrikami mohou intervaly také zahrnovat vzdálenost, aktivní energii, souhrny tepové frekvence a tempo nebo rychlost aktivní doby. Hodnoty oddělují zaznamenaná měření od odhadů; nedostupné hodnoty se přeskočí.
Když je vybrána vzdálenost, splits mohou zahrnovat odhadované kilometrové a milové úseky. Mohou se lišit od úseků zaznamenávající aplikace a poslední úsek je označen jako částečný, pokud je kratší než cílová vzdálenost. Chybějící čtení vzdálenosti nebo nepodporované typy tréninků mohou zabránit výpočtu úseků.
Skóre úsilí tréninku
Exporty JSON a Markdown Verze 2 mohou zahrnovat vybrané hodnoty Skóre úsilí tréninku (effortScore) a Odhadované skóre úsilí tréninku (estimatedEffortScore). Každé je objektem obsahujícím qty a units: "appleEffortScore".
Skóre vyžadují iOS 18 nebo novější a přístup k souvisejícím datům v Apple Health. Skóre celého tréninku a aktivit jsou oddělená. Jsou nezávislá na Časovém seskupení a Zahrnout metriky tréninku; CSV je nezahrnuje.
V Procházet → Tréninky otevřete stránku exportu seznamu nebo nastavení exportu Verze 2 tréninku a poté před exportem použijte Vybrat pole exportu k výběru skóre úsilí.
Časové seskupení metrik tréninku
Při použití Verze exportu 2 a zapnutém „Zahrnout metriky tréninku“ můžete řídit úroveň detailu dat časových řad:
- Minuty: Seskupuje metriky tréninku podle minut hodiny. První a poslední minuta mohou zahrnovat několik sekund těsně před začátkem nebo po skončení tréninku.
- Sekundy: Seskupuje metriky tréninku podle sekund hodiny; každá časová značka označuje začátek své sekundy. První a poslední sekunda mohou zahrnovat zlomek sekundy těsně mimo trénink. Soubory jsou větší než při minutovém seskupení.
Aktivní a klidová energie používají v každé časové skupině stejné sjednocené součty jako ostatní metriky tréninku. Čtení z více zařízení nebo aplikací se zahrnují společně.
Tréninky Verze 1 (Legacy)
Verze 1 používá jednodušší strukturu. Pro nové exporty se doporučuje Verze 2.
Struktura Verze 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"
}
]
}