Метрики здоровья - формат экспорта JSON
Документация по структуре метрик здоровья в экспортах JSON
Последнее обновление: 31 октября 2026 г.
На этой странице
Экспорты JSON хранят метрики здоровья в массиве metrics.
Формат имени метрики
Все имена метрик в экспортах JSON используют формат snake_case (строчные буквы с подчёркиваниями). Например:
- "Step Count" становится
"step_count" - "Blood Pressure" становится
"blood_pressure" - "Heart Rate" становится
"heart_rate" - "Walking + Running Distance" становится
"walking_running_distance"
Структура
Массив metrics содержит объекты, каждый из которых представляет конкретный тип метрики здоровья. Большинство метрик здоровья следуют общей структуре:
{
"name": "step_count",
"units": "count",
"data": [
{
"qty": 8500,
"date": "2024-02-06 14:30:00 -0800",
"source": "Apple Watch"
}
]
}
Общие поля
name(String): имя метрики здоровья в формате snake_case (например, "step_count", "heart_rate", "active_energy")units(String): единица измерения (например, "count", "count/min", "kcal")data(Array): массив точек данных, каждая содержит:qty(Number): значение количестваdate(Date): метка времени в форматеyyyy-MM-dd HH:mm:ss Zsource(String, когда доступно): приложение или устройство, записавшее выборку
Специальные форматы метрик
Некоторые метрики здоровья имеют уникальные структуры, отличающиеся от общего формата:
Артериальное давление
Показания артериального давления включают систолическое и диастолическое значения:
{
"name": "blood_pressure",
"units": "mmHg",
"data": [
{
"date": "2024-02-06 14:30:00 -0800",
"start": "2024-02-06 14:30:00 -0800",
"end": "2024-02-06 14:30:00 -0800",
"systolic": 120,
"diastolic": 80,
"source": "Health"
}
]
}
Поля:
systolic(Number): систолическое (верхнее) показание артериального давления. Сводные экспорты используют среднее показаний во временной группе.diastolic(Number): диастолическое (нижнее) показание артериального давления. Сводные экспорты используют среднее показаний во временной группе.
Пульс
Данные пульса включают минимальные, средние и максимальные значения:
{
"name": "heart_rate",
"units": "count/min",
"data": [
{
"date": "2024-02-06 14:30:00 -0800",
"Min": 65,
"Avg": 72,
"Max": 85,
"source": "Apple Watch"
}
]
}
Поля:
Min(Number): минимальный пульс за период измеренияAvg(Number): средний пульс за период измеренияMax(Number): максимальный пульс за период измерения
Вариабельность сердечного ритма
При выключенном Суммировать данные экспорты JSON вариабельности сердечного ритма (SDNN) могут включать доступные показания от удара к удару. Для них требуется доступ на чтение Серия сердечного ритма в Apple Health.
Сводные экспорты, экспорты CSV и Recovery HRV не включают показания от удара к удару.
Анализ сна
Структура данных сна зависит от того, включён или выключен Суммировать данные.
Суммировать данные включён
При включённом Суммировать данные данные сна сводятся по дням. Длительности одной и той же стадии суммируются. Общий сон — сумма asleep, core, deep и REM. JSON сохраняет каждый день. В CSV более крупная временная группа показывает последний день в этой группе:
{
"name": "sleep_analysis",
"units": "hr",
"data": [
{
"date": "2024-02-06 00:00:00 -0800",
"totalSleep": 7.5,
"asleep": 0.5,
"core": 3.5,
"deep": 1.5,
"rem": 2.0,
"sleepStart": "2024-02-05 23:00:00 -0800",
"sleepEnd": "2024-02-06 06:30:00 -0800",
"inBed": 8.0,
"inBedStart": "2024-02-05 22:45:00 -0800",
"inBedEnd": "2024-02-06 06:45:00 -0800",
"awake": 0.0,
"source": "Apple Watch"
}
]
}
Поля:
totalSleep(Number): общее время сна в часахasleep(Number): время сна без записанной стадии сна, в часахcore(Number): длительность core-сна в часахdeep(Number): длительность глубокого сна в часахrem(Number): длительность REM-сна в часахawake(Number): время бодрствования в часахsleepStart(Date): когда сон фактически началсяsleepEnd(Date): когда сон фактически закончилсяinBed(Number): общее время в постели в часахinBedStart(Date): когда вы легли в постельinBedEnd(Date): когда вы встали с постели
Суммировать данные выключен
При выключенном Суммировать данные включаются отдельные сегменты сна:
{
"name": "sleep_analysis",
"units": "hr",
"data": [
{
"date": "2024-02-05 23:00:00 -0800",
"start": "2024-02-05 23:00:00 -0800",
"end": "2024-02-05 23:30:00 -0800",
"startDate": "2024-02-05 23:00:00 -0800",
"endDate": "2024-02-05 23:30:00 -0800",
"qty": 0.5,
"value": "Core",
"source": "Apple Watch"
}
]
}
Поля:
date,start,startDate(Date): время начала сегмента снаend,endDate(Date): время конца сегмента снаsource(String): приложение или устройство, записавшее сегментqty(Number): длительность сегмента в часахvalue(String): состояние сна — одно из:"Awake""Asleep"(некатегоризированная фаза сна)"In Bed""Core""REM""Deep""Unspecified"
Примечание: "Asleep" означает некатегоризированную фазу сна (а не общее время сна). Это может произойти, если источник данных не поддерживает отслеживание фаз сна.
Глюкоза крови
Показания глюкозы крови включают сведения о времени приёма пищи:
{
"name": "blood_glucose",
"units": "mg/dL",
"data": [
{
"date": "2024-02-06 08:00:00 -0800",
"start": "2024-02-06 08:00:00 -0800",
"end": "2024-02-06 08:00:00 -0800",
"qty": 95,
"mealTime": "Before Meal",
"source": "Health"
}
]
}
Поля:
qty(Number): уровень глюкозы кровиmealTime(String): одно из:"Before Meal""After Meal""Unspecified"
Питание
Когда Суммировать данные выключен, отдельные выборки количества питания (например, Dietary Energy или Carbohydrates) могут включать сведения о еде, записанные в Apple Health. Например:
{
"name": "dietary_energy",
"units": "kcal",
"data": [
{
"date": "2024-02-06 08:00:00 -0800",
"start": "2024-02-06 08:00:00 -0800",
"end": "2024-02-06 08:00:00 -0800",
"qty": 240,
"source": "Lose It!",
"foodType": "Boneless, Skinless Grilled Chicken Breast"
}
]
}
Поля:
qty(Number): количество нутриента для выборкиfoodType(String, необязательно): имя еды, записанное приложением-источником, когда доступно
При включённом Суммировать данные итоги питания не включают foodType.
Сексуальная активность
Записи сексуальной активности отслеживают использование защиты:
{
"name": "sexual_activity",
"units": "count",
"data": [
{
"date": "2024-02-06 00:00:00 -0800",
"Unspecified": 0,
"Protection Used": 1,
"Protection Not Used": 0,
"source": "Health"
}
]
}
Поля:
Unspecified(Number): число событий в тот день, когда статус защиты неизвестенProtection Used(Number): число событий в тот день, когда защита использоваласьProtection Not Used(Number): число событий в тот день, когда защита не использовалась
Сводные экспорты считают каждый календарный день. JSON сохраняет каждый день. В CSV более крупная временная группа показывает последний день в этой группе.
Мытьё рук
События мытья рук отслеживают статус завершения:
{
"name": "handwashing",
"units": "s",
"data": [
{
"date": "2024-02-06 12:00:00 -0800",
"start": "2024-02-06 12:00:00 -0800",
"end": "2024-02-06 12:00:25 -0800",
"qty": 25,
"value": "Completed",
"source": "Apple Watch"
}
]
}
Поля:
qty(Number): длительность в секундах. Сводные экспорты используют среднюю длительность во временной группе.value(String):"Completed", когда сессия длится более 20 секунд, иначе"Incomplete"
Чистка зубов
События чистки зубов отслеживают статус завершения:
{
"name": "toothbrushing",
"units": "s",
"data": [
{
"date": "2024-02-06 08:00:00 -0800",
"start": "2024-02-06 08:00:00 -0800",
"end": "2024-02-06 08:02:10 -0800",
"qty": 130,
"value": "Completed",
"source": "Health"
}
]
}
Поля:
qty(Number): длительность в секундах. Сводные экспорты используют среднюю длительность во временной группе.value(String):"Completed", когда сессия длится не менее 2 минут, иначе"Incomplete"
Введение инсулина
Записи введения инсулина включают причину введения:
{
"name": "insulin_delivery",
"units": "IU",
"data": [
{
"date": "2024-02-06 08:00:00 -0800",
"start": "2024-02-06 08:00:00 -0800",
"end": "2024-02-06 08:00:00 -0800",
"qty": 5,
"reason": "Bolus",
"source": "Health"
}
]
}
Поля:
qty(Number): количество введённого инсулина. Сводные экспорты суммируют количества во временной группе.reason(String): одно из:"Bolus"(инсулин на приём пищи)"Basal"(фоновый инсулин)