Antrenamente - Format export JSON
Documentație pentru structura antrenamentelor în exporturile JSON
Ultima actualizare: 31 octombrie 2026
Pe această pagină
Exporturile JSON stochează antrenamentele în matricea workouts.
Versiuni de export
Health Auto Export acceptă două versiuni de export pentru antrenamente:
- Versiunea 2 (Recomandată): Format îmbunătățit cu metadate și date structurate mai detaliate
- Versiunea 1 (Legacy): Format mai vechi păstrat pentru compatibilitate cu fluxurile de lucru existente
Antrenamente Versiunea 2
Versiunea 2 include următoarele câmpuri obligatorii și date opționale. Exemplele folosesc Localizează unitățile dezactivat; activarea poate schimba etichetele unităților în seriile de metrici.
Structură de bază
{
"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
}
Câmpuri obligatorii
id(String): Identificator unic pentru antrenamentname(String): Numele tipului de antrenament (de ex. "Running", "Cycling", "Swimming")start(Date): Ora de început a antrenamentului în formatyyyy-MM-dd HH:mm:ss Zend(Date): Ora de sfârșit a antrenamentului în formatyyyy-MM-dd HH:mm:ss Zduration(Number): Durata antrenamentului în secunde
Câmpuri opționale
Câmpurile opționale depind de datele disponibile și de selecțiile de export:
Sursa înregistrării
{
"source": {
"name": "Workout App",
"identifier": "com.example.workouts"
}
}
source(Object): Aplicația sau dispozitivul care a înregistrat antrenamentul, cu numele și identificatorul aplicației. Citirile individuale de metrici au șiruri de sursă separate și pot proveni din altă aplicație sau dispozitiv.
Informații despre locație
{
"location": "Outdoor",
"isIndoor": false
}
location(String): Una dintre"Indoor","Outdoor","Pool","Open Water"isIndoor(Boolean): Dacă antrenamentul a fost efectuat în interior
Energie și intensitate
{
"activeEnergyBurned": {
"qty": 350,
"units": "kcal"
},
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"intensity": {
"qty": 8.5,
"units": "kcal/hr\u00b7kg"
}
}
activeEnergyBurned(Object): Caloriile active arse în timpul antrenamentuluitotalEnergy(Object): Caloriile totale (active + de repaus) arseintensity(Object): Valoarea metabolic equivalent of task (MET)
Distanță și viteză
{
"distance": {
"qty": 3.5,
"units": "mi"
}
}
distance(Object): Distanța totală parcursăspeed(Object): Viteza medie calculată din distanță și duratăavgSpeed(Object): Viteza medie pe parcursul antrenamentuluimaxSpeed(Object): Viteza maximă atinsă
Fiecare obiect include qty și units.
Elevație
{
"elevationUp": {
"qty": 500,
"units": "ft"
},
"elevationDown": {
"qty": 450,
"units": "ft"
}
}
elevationUp(Object): Elevația totală câștigatăelevationDown(Object): Elevația totală pierdută
Unități: "ft" (picioare) sau "m" (metri)
Date de mediu
{
"temperature": {
"qty": 72,
"units": "degF"
},
"humidity": {
"qty": 65,
"units": "%"
}
}
temperature(Object): Temperatura ambientală în timpul antrenamentuluihumidity(Object): Procentul de umiditate relativă
Unități temperatură: "degF" (Fahrenheit) sau "degC" (Celsius)
Câmpuri specifice înotului
{
"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): Lungimea fiecărui turstrokeStyle(String): Una dintre:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): Scorul de eficiență la înotsalinity(String):"Fresh Water"sau"Salt Water"totalSwimmingStrokeCount(Object): Numărul total de brațeswimCadence(Object): Brațe pe minut
Date despre pași și cadență
{
"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): Matrice de măsurători ale numărului de pași în timpstepCadence(Object): Pași pe minutflightsClimbed(Object): Numărul de etaje de scări urcate
Date frecvență cardiacă
{
"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): Rezumat cu frecvența cardiacă min, medie și max în timpul antrenamentuluimaxHeartRate(Object): Frecvența cardiacă maximă în timpul antrenamentuluiavgHeartRate(Object): Frecvența cardiacă medie în timpul antrenamentuluiheartRateData(Array): Măsurători detaliate din antrenament, care se termină când se termină antrenamentulheartRateRecovery(Array): Măsurători separate din cele două minute imediat după terminarea antrenamentului
Frecvențele cardiace de rezumat folosesc valorile înregistrate ale antrenamentului când sunt disponibile, cu revenire la citirile de frecvență cardiacă ale antrenamentului. Citirile exportate includ măsurătorile luate în timpul pauzelor, deci vârfurile și mediile pot diferi de rezumat.
Matrici de date pe serie temporală
Multe metrici pot fi incluse ca matrici pe serie temporală când este activat Include metricile antrenamentului:
{
"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"
}
]
}
Structura QuantityData:
date(Date): Timestamp-ul măsurăriiqty(Number): Valoarea cantitățiiunits(String): Unitatea de măsurăsource(String, opțional): Dispozitivul sau aplicația sursă de date
Structura HeartRateData:
date(Date): Timestamp-ul măsurăriiMin(Number): Frecvența cardiacă minimăAvg(Number): Frecvența cardiacă medieMax(Number): Frecvența cardiacă maximăunits(String): Unitatea (count/mincu Localizează unitățile dezactivat)source(String, opțional): Dispozitivul sau aplicația sursă de date
Date rută
Când Include datele rutei este activat și antrenamentul are date 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
}
]
}
Câmpuri locație:
latitude(Number): Coordonata latitudine GPSlongitude(Number): Coordonata longitudine GPSaltitude(Number): Elevația în metricourse(Number): Direcția de deplasare în grade (0-360)courseAccuracy(Number): Precizia măsurării direcției în gradehorizontalAccuracy(Number): Precizia poziției orizontale în metriverticalAccuracy(Number): Precizia poziției verticale în metritimestamp(Date): Momentul înregistrării locațieispeed(Number): Viteza în metri pe secundăspeedAccuracy(Number): Precizia măsurării vitezei în m/s
Metadate
{
"metadata": {
"customField": {
"label": "value",
"quantity": 123
},
"anotherField": [
1,
2,
3
]
}
}
metadata(Object): Metadate personalizate suplimentare asociate antrenamentului
Evenimente, activități și splituri
Exporturile JSON și Markdown Versiunea 2 pot include events, segments, laps și activities înregistrate de aplicația de antrenament. Acestea rămân disponibile când Include metricile antrenamentului este dezactivat. CSV și GPX nu includ aceste înregistrări.
Cu Include metricile antrenamentului activat și metricile relevante selectate, intervalele pot include și distanță, energie activă, rezumate de frecvență cardiacă și ritm sau viteză pe timpul activ. Valorile disting măsurătorile înregistrate de estimări; valorile indisponibile sunt omise.
Cu distanța selectată, splits pot include splituri estimate pe kilometru și milă. Pot diferi de spliturile aplicației de înregistrare, iar splitul final este marcat ca parțial când este mai scurt decât distanța țintă. Citirile de distanță lipsă sau tipurile de antrenament nesuportate pot împiedica calculul spliturilor.
Scoruri de efort ale antrenamentului
Exporturile JSON și Markdown Versiunea 2 pot include valorile selectate Scor al efortului antrenamentului (effortScore) și Scor estimat al efortului antrenamentului (estimatedEffortScore). Fiecare este un obiect cu qty și units: "appleEffortScore".
Scorurile necesită iOS 18 sau ulterior și acces la datele corespunzătoare din Apple Health. Scorurile pentru întregul antrenament și pentru activități sunt separate. Sunt independente de Grupare temporală și Include metricile antrenamentului; CSV nu le include.
În Navighează → Antrenamente, deschideți foaia de export a listei sau setările de export Versiunea 2 ale unui antrenament, apoi folosiți Selectați câmpurile de export pentru a alege scorurile de efort înainte de export.
Gruparea temporală a metricilor de antrenament
Când folosiți Versiunea de export 2 și Include metricile antrenamentului este activat, puteți controla granularitatea datelor pe serie temporală:
- Minute: Grupează metricile de antrenament pe minutele ceasului. Primul și ultimul minut pot include câteva secunde imediat înainte de începerea antrenamentului sau imediat după terminare.
- Secunde: Grupează metricile de antrenament pe secundele ceasului, fiecare timestamp marcând începutul secundei sale. Prima și ultima secundă pot include fracțiunea de secundă imediat în afara antrenamentului. Fișierele sunt mai mari decât la gruparea pe minute.
Energia activă și de repaus folosesc aceleași totaluri combinate ca celelalte metrici de antrenament din fiecare grup temporal. Citirile de pe mai multe dispozitive sau aplicații sunt incluse împreună.
Antrenamente Versiunea 1 (Legacy)
Versiunea 1 folosește o structură mai simplă. Pentru exporturi noi, Versiunea 2 este recomandată.
Structura Versiunii 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"
}
]
}