Buổi tập - Định dạng xuất JSON

Tài liệu về cấu trúc buổi tập trong các lần xuất JSON

Last updated: March 31, 2026

Trên trang này

Buổi tập

Dữ liệu buổi tập gồm các phiên tập được ghi trong Apple Health — chạy bộ, đạp xe, bơi, tập sức mạnh và nhiều loại khác. Trong bản xuất JSON, chúng nằm trong mảng workouts.

Phiên bản xuất

Health Auto Export hỗ trợ hai phiên bản xuất buổi tập:

  • Phiên bản 2 (Khuyến nghị): Định dạng nâng cao với siêu dữ liệu chi tiết hơn và dữ liệu có cấu trúc
  • Phiên bản 1 (Cũ): Định dạng đơn giản hơn, giữ để tương thích quy trình hiện có

Buổi tập phiên bản 2

Phiên bản 2 cung cấp cấu trúc đầy đủ với các trường tùy chọn chỉ xuất hiện khi có dữ liệu.

Cấu trúc cơ bản

{
  "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
}

Trường bắt buộc

  • id (Chuỗi): Định danh duy nhất cho buổi tập
  • name (Chuỗi): Tên loại buổi tập (ví dụ: "Running", "Cycling", "Swimming")
  • start (Ngày/giờ): Thời điểm bắt đầu, định dạng yyyy-MM-dd HH:mm:ss Z
  • end (Ngày/giờ): Thời điểm kết thúc, định dạng yyyy-MM-dd HH:mm:ss Z
  • duration (Số): Độ dài buổi tập, đơn vị giây

Trường tùy chọn

Các trường sau chỉ có khi có dữ liệu:

Thông tin vị trí

{
  "location": "Outdoor",
  "isIndoor": false
}
  • location (Chuỗi): Một trong "Indoor", "Outdoor", "Pool", "Open Water"
  • isIndoor (Boolean): Buổi tập diễn ra trong nhà hay không

Năng lượng và cường độ

{
  "activeEnergyBurned": {
    "qty": 350,
    "units": "kcal"
  },
  "totalEnergy": {
    "qty": 450,
    "units": "kcal"
  },
  "intensity": {
    "qty": 8.5,
    "units": "MET"
  }
}
  • activeEnergyBurned (Đối tượng): Calo hoạt động tiêu hao trong buổi tập
  • totalEnergy (Đối tượng): Tổng calo tiêu hao (hoạt động + nghỉ)
  • intensity (Đối tượng): Giá trị MET (tương đương trao đổi chất)

Quãng đường và tốc độ

{
  "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 (Đối tượng): Tổng quãng đường
  • speed (Đối tượng): Tốc độ hiện tại hoặc trung bình
  • avgSpeed (Đối tượng): Tốc độ trung bình suốt buổi tập
  • maxSpeed (Đối tượng): Tốc độ tối đa đạt được

Đơn vị:

  • Quãng đường: "mi" (dặm) hoặc "km" (kilômét)
  • Tốc độ: "mph" (dặm/giờ) hoặc "kmph" (kilômét/giờ)

Độ cao

{
  "elevationUp": {
    "qty": 500,
    "units": "ft"
  },
  "elevationDown": {
    "qty": 450,
    "units": "ft"
  }
}
  • elevationUp (Đối tượng): Tổng độ cao lên
  • elevationDown (Đối tượng): Tổng độ cao xuống

Đơn vị: "ft" (foot) hoặc "m" (mét)

Dữ liệu môi trường

{
  "temperature": {
    "qty": 72,
    "units": "degF"
  },
  "humidity": {
    "qty": 65,
    "units": "%"
  }
}
  • temperature (Đối tượng): Nhiệt độ môi trường trong lúc tập
  • humidity (Đối tượng): Độ ẩm tương đối, phần trăm

Đơn vị nhiệt độ: "degF" (Fahrenheit) hoặc "degC" (Celsius)

Trường riêng cho bơi

{
  "lapLength": {
    "qty": 0.025,
    "units": "mi"
  },
  "strokeStyle": "Freestyle",
  "swolfScore": 45,
  "salinity": "Fresh Water",
  "totalSwimmingStrokeCount": {
    "qty": 1200,
    "units": "count"
  },
  "swimCadence": {
    "qty": 30,
    "units": "spm"
  }
}
  • lapLength (Đối tượng): Độ dài mỗi làn
  • strokeStyle (Chuỗi): Một trong:
    • "Backstroke"
    • "Breaststroke"
    • "Butterfly"
    • "Freestyle"
    • "Mixed"
    • "Kickboard"
    • "Unknown"
  • swolfScore (Số): Điểm hiệu quả bơi (SWOLF)
  • salinity (Chuỗi): "Fresh Water" hoặc "Salt Water"
  • totalSwimmingStrokeCount (Đối tượng): Tổng số nhịp quạt nước
  • swimCadence (Đối tượng): Nhịp quạt mỗi phút

Dữ liệu bước và nhịp

{
  "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 (Mảng): Mảng các lần đếm bước theo thời gian
  • stepCadence (Đối tượng): Bước mỗi phút
  • flightsClimbed (Đối tượng): Số tầng cầu thang đã leo

Dữ liệu nhịp tim

{
  "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 (Đối tượng): Tóm tắt nhịp tối thiểu, trung bình và tối đa
  • maxHeartRate (Đối tượng): Nhịp tim tối đa trong buổi tập
  • avgHeartRate (Đối tượng): Nhịp tim trung bình trong buổi tập
  • heartRateData (Mảng): Các đo nhịp tim chi tiết suốt buổi tập
  • heartRateRecovery (Mảng): Các đo nhịp tim trong giai đoạn hồi phục

Mảng chuỗi thời gian

Nhiều chỉ số có thể được đưa vào dạng mảng chuỗi thời gian khi bạn bật tùy chọn bao gồm chỉ số buổi tập:

{
  "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"
    }
  ]
}

Cấu trúc QuantityData:

  • date (Ngày/giờ): Mốc thời gian của phép đo
  • qty (Số): Giá trị số lượng
  • units (Chuỗi): Đơn vị đo
  • source (Chuỗi, tùy chọn): Thiết bị hoặc ứng dụng nguồn dữ liệu

Cấu trúc HeartRateData:

  • date (Ngày/giờ): Mốc thời gian của phép đo
  • Min (Số): Nhịp tim tối thiểu
  • Avg (Số): Nhịp tim trung bình
  • Max (Số): Nhịp tim tối đa
  • units (Chuỗi): Đơn vị (thường là "bpm")
  • source (Chuỗi, tùy chọn): Thiết bị hoặc ứng dụng nguồn dữ liệu

Dữ liệu lộ trình

Khi bạn bật tùy chọn bao gồm dữ liệu lộ trình và buổi tập có dữ liệu 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
    }
  ]
}

Trường vị trí:

  • latitude (Số): Tọa độ vĩ độ GPS
  • longitude (Số): Tọa độ kinh độ GPS
  • altitude (Số): Độ cao, mét
  • course (Số): Hướng di chuyển, độ (0–360)
  • courseAccuracy (Số): Độ chính xác đo hướng, độ
  • horizontalAccuracy (Số): Độ chính xác vị trí ngang, mét
  • verticalAccuracy (Số): Độ chính xác theo phương đứng, mét
  • timestamp (Ngày/giờ): Thời điểm ghi vị trí
  • speed (Số): Tốc độ, mét mỗi giây
  • speedAccuracy (Số): Độ chính xác đo tốc độ, m/s

Siêu dữ liệu

{
  "metadata": {
    "customField": "value",
    "anotherField": 123
  }
}
  • metadata (Đối tượng): Siêu dữ liệu tùy chỉnh bổ sung gắn với buổi tập

Buổi tập phiên bản 1 (cũ)

Phiên bản 1 dùng cấu trúc đơn giản hơn. Với bản xuất mới, nên dùng phiên bản 2.

Cấu trúc phiên bản 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": "count"
    }
  ],
  "route": [
    {
      "lat": 37.7749,
      "lon": -122.4194,
      "altitude": 50.5,
      "timestamp": "2024-02-06 07:00:00 -0800"
    }
  ]
}

Nhóm thời gian chỉ số buổi tập

Khi dùng phiên bản xuất 2 và bật tùy chọn bao gồm chỉ số buổi tập, bạn kiểm soát độ chi tiết của dữ liệu chuỗi thời gian:

  • Phút: Gom chỉ số buổi tập theo khoảng phút
  • Giây: Gom theo khoảng giây (chi tiết hơn, tệp lớn hơn)

Mẹo

  • Bao gồm dữ liệu lộ trình: Bật tùy chọn này để có thông tin GPS cho buổi tập ngoài trời
  • Bao gồm chỉ số buổi tập: Bật để có dữ liệu chuỗi thời gian chi tiết cho chỉ số như nhịp tim, công suất và nhịp
  • Phiên bản xuất: Dùng phiên bản 2 để có cấu trúc dữ liệu đầy đủ nhất
  • Xuất GPX: Dữ liệu lộ trình cũng có thể xuất riêng dạng GPX để dùng trong ứng dụng bản đồ

Tài liệu liên quan

<|tool▁calls▁begin|><|tool▁call▁begin|>
Read