Trainingen - JSON Exportformaat
Documentatie over de structuur van trainingen in JSON-exporten
Last updated: February 6, 2026
On this page
Trainingen
Trainingsgegevens omvatten al je trainingssessies die zijn vastgelegd in Apple Health, zoals hardlopen, fietsen, zwemmen, krachttraining en meer. In JSON-exporten worden trainingen opgeslagen in de array workouts.
Exportversies
Health Auto Export ondersteunt twee trainingsexportversies:
- Versie 2 (Aanbevolen): Verbeterd formaat met meer gedetailleerde metadata en gestructureerde gegevens
- Versie 1 (Legacy): Ouder formaat dat wordt onderhouden voor compatibiliteit met bestaande workflows
Trainingen Versie 2
Versie 2 biedt een uitgebreide structuur met optionele velden die alleen worden opgenomen wanneer gegevens beschikbaar zijn.
Basisstructuur
{
"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
}
Verplichte Velden
id(String): Unieke identifier voor de trainingname(String): Naam van het trainingstype (bijv. "Running", "Cycling", "Swimming")start(Date): Starttijd van de training in formaatyyyy-MM-dd HH:mm:ss Zend(Date): Eindtijd van de training in formaatyyyy-MM-dd HH:mm:ss Zduration(Number): Duur van de training in seconden
Optionele Velden
De volgende velden worden alleen opgenomen wanneer gegevens beschikbaar zijn:
Locatie-informatie
{
"location": "Outdoor",
"isIndoor": false
}
location(String): Een van"Indoor","Outdoor","Pool","Open Water"isIndoor(Boolean): Of de training binnen is uitgevoerd
Energie en Intensiteit
{
"activeEnergyBurned": {
"qty": 350,
"units": "kcal"
},
"totalEnergy": {
"qty": 450,
"units": "kcal"
},
"intensity": {
"qty": 8.5,
"units": "MET"
}
}
activeEnergyBurned(Object): Actieve calorieën verbrand tijdens de trainingtotalEnergy(Object): Totale calorieën (actief + rustend) verbrandintensity(Object): Metabool equivalent van de taak (MET)-waarde
Afstand en Snelheid
{
"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): Totale afstand afgelegdspeed(Object): Huidige of gemiddelde snelheidavgSpeed(Object): Gemiddelde snelheid gedurende de hele trainingmaxSpeed(Object): Maximale snelheid bereikt
Eenheden:
- Afstand:
"mi"(mijlen) of"km"(kilometers) - Snelheid:
"mph"(mijlen per uur) of"kmph"(kilometers per uur)
Hoogte
{
"elevationUp": {
"qty": 500,
"units": "ft"
},
"elevationDown": {
"qty": 450,
"units": "ft"
}
}
elevationUp(Object): Totale hoogte gewonnenelevationDown(Object): Totale hoogte verloren
Eenheden: "ft" (voeten) of "m" (meters)
Omgevingsgegevens
{
"temperature": {
"qty": 72,
"units": "degF"
},
"humidity": {
"qty": 65,
"units": "%"
}
}
temperature(Object): Omgevingstemperatuur tijdens de traininghumidity(Object): Relatieve luchtvochtigheid percentage
Temperatuureenheden: "degF" (Fahrenheit) of "degC" (Celsius)
Zwemspecifieke Velden
{
"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): Lengte van elke baantjestrokeStyle(String): Een van:"Backstroke""Breaststroke""Butterfly""Freestyle""Mixed""Kickboard""Unknown"
swolfScore(Number): Zwemefficiëntiescoresalinity(String):"Fresh Water"of"Salt Water"totalSwimmingStrokeCount(Object): Totaal aantal slagenswimCadence(Object): Slagen per minuut
Stap- en Cadentiegegevens
{
"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): Array van stapmetingen in de loop van de tijdstepCadence(Object): Stappen per minuutflightsClimbed(Object): Aantal trappen beklimmen
Hartslaggegevens
{
"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): Samenvatting met min, gemiddelde en max hartslagmaxHeartRate(Object): Maximale hartslag tijdens de trainingavgHeartRate(Object): Gemiddelde hartslag tijdens de trainingheartRateData(Array): Gedetailleerde hartslagmetingen gedurende de hele trainingheartRateRecovery(Array): Hartslagmetingen tijdens de herstelperiode
Tijdreeksgegevensarrays
Veel metrieken kunnen worden opgenomen als tijdreeksarrays wanneer "Trainingmetrieken opnemen" is ingeschakeld:
{
"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-structuur:
date(Date): Tijdstempel van de metingqty(Number): Hoeveelheidswaardeunits(String): Meeteenheidsource(String, optioneel): Gegevensbronapparaat of -app
HeartRateData-structuur:
date(Date): Tijdstempel van de metingMin(Number): Minimale hartslagAvg(Number): Gemiddelde hartslagMax(Number): Maximale hartslagunits(String): Eenheid (meestal "bpm")source(String, optioneel): Gegevensbronapparaat of -app
Routegegevens
Wanneer "Routegegevens opnemen" is ingeschakeld en de training GPS-gegevens heeft:
{
"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
}
]
}
Locatievelden:
latitude(Number): GPS-breedtegraadcoördinaatlongitude(Number): GPS-lengtegraadcoördinaataltitude(Number): Hoogte in meterscourse(Number): Reisrichting in graden (0-360)courseAccuracy(Number): Nauwkeurigheid van de koersmeting in gradenhorizontalAccuracy(Number): Horizontale positienauwkeurigheid in metersverticalAccuracy(Number): Verticale positienauwkeurigheid in meterstimestamp(Date): Tijdstip waarop de locatie is vastgelegdspeed(Number): Snelheid in meters per secondespeedAccuracy(Number): Nauwkeurigheid van de snelheidsmeting in m/s
Metadata
{
"metadata": {
"customField": "value",
"anotherField": 123
}
}
metadata(Object): Aanvullende aangepaste metadata geassocieerd met de training
Trainingen Versie 1 (Legacy)
Versie 1 gebruikt een eenvoudigere structuur. Voor nieuwe exporten wordt Versie 2 aanbevolen.
Versie 1 Structuur
{
"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"
}
]
}
Tijdsgroepering van Trainingmetrieken
Bij gebruik van Exportversie 2 en wanneer "Trainingmetrieken opnemen" is ingeschakeld, kun je de granulariteit van tijdreeksgegevens bepalen:
- Minuten: Groepeert trainingmetrieken per minuutintervallen
- Seconden: Groepeert trainingmetrieken per seconde-intervallen (gedetailleerder, groter bestand)
Tips
- Routegegevens opnemen: Schakel deze optie in om GPS-route-informatie te krijgen voor buitentrainingen
- Trainingmetrieken opnemen: Schakel dit in om gedetailleerde tijdreeksgegevens te krijgen voor metrieken zoals hartslag, vermogen en cadans
- Exportversie: Gebruik Versie 2 voor de meest uitgebreide gegevensstructuur
- GPX-export: Routegegevens kunnen ook worden geëxporteerd als aparte GPX-bestanden voor gebruik in kaarttoepassingen