Trung tâm trợ giúp HealthyApps
Tiếng Việt
Trung tâm trợ giúp
Trang chính ↗

Tìm chủ đề trợ giúp

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

Tài liệu cấu trúc buổi tập trong xuất JSON

Cập nhật lần cuối: 31 tháng 10, 2026

Trên trang này
Phiên bản xuất
Buổi tập Phiên bản 2 Buổi tập Phiên bản 2 Cấu trúc cơ bảnTrường bắt buộcTrường tùy chọnNhóm thời gian chỉ số buổi tập
Buổi tập Phiên bản 1 (Cũ) Buổi tập Phiên bản 1 (Cũ) Cấu trúc Phiên bản 1
Tài liệu liên quan

Xuất JSON lưu buổi tập 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 metadata chi tiết hơn và dữ liệu có cấu trúc
  • Phiên bản 1 (Cũ): Định dạng cũ hơn giữ để tương thích với quy trình hiện có

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

Phiên bản 2 gồm các trường bắt buộc sau và dữ liệu tùy chọn. Ví dụ dùng Địa phương hóa đơn vị tắt; bật có thể đổi nhãn đơn vị trong chuỗi chỉ số.

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 (String): Định danh duy nhất của buổi tập
  • name (String): Tên loại buổi tập (ví dụ "Running", "Cycling", "Swimming")
  • start (Date): Thời gian bắt đầu buổi tập ở định dạng yyyy-MM-dd HH:mm:ss Z
  • end (Date): Thời gian kết thúc buổi tập ở định dạng yyyy-MM-dd HH:mm:ss Z
  • duration (Number): Thời lượng buổi tập theo giây

Trường tùy chọn

Trường tùy chọn phụ thuộc dữ liệu khả dụng và lựa chọn xuất:

Nguồn ghi

{
  "source": {
    "name": "Workout App",
    "identifier": "com.example.workouts"
  }
}
  • source (Object): Ứng dụng hoặc thiết bị ghi buổi tập, với tên và định danh ứng dụng. Các số đo chỉ số riêng có chuỗi nguồn riêng và có thể đến từ ứng dụng hoặc thiết bị khác.

Thông tin vị trí

{
  "location": "Outdoor",
  "isIndoor": false
}
  • location (String): Một trong "Indoor", "Outdoor", "Pool", "Open Water"
  • isIndoor (Boolean): Buổi tập có được thực hiện 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": "kcal/hr\u00b7kg"
  }
}
  • activeEnergyBurned (Object): Calo hoạt động đốt trong buổi tập
  • totalEnergy (Object): Tổng calo (hoạt động + nghỉ) đã đốt
  • intensity (Object): Giá trị tương đương trao đổi chất (MET)

Khoảng cách và tốc độ

{
  "distance": {
    "qty": 3.5,
    "units": "mi"
  }
}
  • distance (Object): Tổng khoảng cách đã đi
  • speed (Object): Tốc độ trung bình tính từ khoảng cách và thời lượng
  • avgSpeed (Object): Tốc độ trung bình trong suốt buổi tập
  • maxSpeed (Object): Tốc độ tối đa đạt được

Mỗi đối tượng gồm qty và units.

Độ cao

{
  "elevationUp": {
    "qty": 500,
    "units": "ft"
  },
  "elevationDown": {
    "qty": 450,
    "units": "ft"
  }
}
  • elevationUp (Object): Tổng độ cao tăng
  • elevationDown (Object): Tổng độ cao giảm

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

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

{
  "temperature": {
    "qty": 72,
    "units": "degF"
  },
  "humidity": {
    "qty": 65,
    "units": "%"
  }
}
  • temperature (Object): Nhiệt độ môi trường trong buổi tập
  • humidity (Object): Độ ẩm tương đối theo 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": "count/min"
  }
}
  • lapLength (Object): Chiều dài mỗi vòng
  • strokeStyle (String): Một trong:
    • "Backstroke"
    • "Breaststroke"
    • "Butterfly"
    • "Freestyle"
    • "Mixed"
    • "Kickboard"
    • "Unknown"
  • swolfScore (Number): Điểm hiệu quả bơi
  • salinity (String): "Fresh Water" hoặc "Salt Water"
  • totalSwimmingStrokeCount (Object): Tổng số cú quạt
  • swimCadence (Object): Cú 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": "count/min"
  },
  "flightsClimbed": {
    "qty": 10,
    "units": "count"
  }
}
  • stepCount (Array): Mảng đo số bước theo thời gian
  • stepCadence (Object): Bước mỗi phút
  • flightsClimbed (Object): Số tầng cầu thang đã leo

Dữ liệu nhịp tim

{
  "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): Tóm tắt với nhịp tim min, avg và max trong buổi tập
  • maxHeartRate (Object): Nhịp tim tối đa trong buổi tập
  • avgHeartRate (Object): Nhịp tim trung bình trong buổi tập
  • heartRateData (Array): Đo chi tiết từ buổi tập, kết thúc khi buổi tập kết thúc
  • heartRateRecovery (Array): Đo riêng từ hai phút ngay sau khi buổi tập kết thúc

Nhịp tim tóm tắt dùng giá trị buổi tập đã ghi khi có, quay về số đo nhịp của buổi tập. Các số đo đã xuất gồm đo trong lúc tạm dừng, nên đỉnh và trung bình có thể khác tóm tắt.

Mảng dữ liệu chuỗi thời gian

Nhiều chỉ số có thể được gồm dưới dạng mảng chuỗi thời gian khi bật «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": "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"
    }
  ]
}

Cấu trúc QuantityData:

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

Cấu trúc HeartRateData:

  • date (Date): Dấu thời gian của phép đo
  • Min (Number): Nhịp tim thấp nhất
  • Avg (Number): Nhịp tim trung bình
  • Max (Number): Nhịp tim cao nhất
  • units (String): Đơn vị (count/min khi Địa phương hóa đơn vị tắt)
  • source (String, tùy chọn): Thiết bị hoặc ứng dụng nguồn dữ liệu

Dữ liệu tuyến đường

Khi bật «Bao gồm dữ liệu tuyến đường» 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 (Number): Tọa độ vĩ độ GPS
  • longitude (Number): Tọa độ kinh độ GPS
  • altitude (Number): Độ cao theo mét
  • course (Number): Hướng di chuyển theo độ (0-360)
  • courseAccuracy (Number): Độ chính xác đo hướng theo độ
  • horizontalAccuracy (Number): Độ chính xác vị trí ngang theo mét
  • verticalAccuracy (Number): Độ chính xác vị trí đứng theo mét
  • timestamp (Date): Thời gian ghi vị trí
  • speed (Number): Tốc độ theo mét mỗi giây
  • speedAccuracy (Number): Độ chính xác đo tốc độ theo m/s

Metadata

{
  "metadata": {
    "customField": {
      "label": "value",
      "quantity": 123
    },
    "anotherField": [
      1,
      2,
      3
    ]
  }
}
  • metadata (Object): Metadata tùy chỉnh bổ sung liên kết với buổi tập

Sự kiện, hoạt động và split

Xuất JSON và Markdown Phiên bản 2 có thể gồm events, segments, laps, và activities do ứng dụng buổi tập ghi. Chúng vẫn khả dụng khi Bao gồm chỉ số buổi tập tắt. CSV và GPX không gồm các bản ghi này.

Với Bao gồm chỉ số buổi tập bật và các chỉ số liên quan đã chọn, khoảng cũng có thể gồm khoảng cách, năng lượng hoạt động, tóm tắt nhịp tim, và nhịp/tốc độ thời gian hoạt động. Giá trị phân biệt đo đã ghi với ước tính; giá trị không khả dụng bị bỏ.

Với khoảng cách đã chọn, splits có thể gồm ước tính split kilomet và dặm. Chúng có thể khác split của ứng dụng ghi, và split cuối được đánh dấu một phần khi ngắn hơn khoảng cách mục tiêu. Số đo khoảng cách thiếu hoặc loại buổi tập không hỗ trợ có thể ngăn tính split.

Điểm nỗ lực buổi tập

Xuất JSON và Markdown Phiên bản 2 có thể gồm giá trị Điểm nỗ lực bài tập (effortScore) và Điểm nỗ lực bài tập ước tính (estimatedEffortScore) đã chọn. Mỗi cái là đối tượng với qty và units: "appleEffortScore".

Điểm cần iOS 18 trở lên và quyền truy cập dữ liệu tương ứng trong Apple Health. Điểm toàn buổi và điểm hoạt động tách biệt. Chúng độc lập với Nhóm thời gian và Bao gồm chỉ số buổi tập; CSV không gồm chúng.

Trong Duyệt → Buổi tập, mở sheet xuất của danh sách hoặc cài đặt xuất Phiên bản 2 của một buổi tập, rồi dùng Chọn trường xuất để chọn điểm nỗ lực trước khi xuất.

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

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

  • Phút: Nhóm chỉ số buổi tập theo phút đồng hồ. Phút đầu và cuối có thể gồm vài giây ngay trước khi buổi tập bắt đầu hoặc ngay sau khi kết thúc.
  • Giây: Nhóm chỉ số buổi tập theo giây đồng hồ, mỗi dấu thời gian đánh dấu bắt đầu giây đó. Giây đầu và cuối có thể gồm phần giây ngay ngoài buổi tập. Tệp lớn hơn nhóm phút.

Năng lượng hoạt động và nghỉ dùng cùng tổng kết hợp như các chỉ số buổi tập khác trong mỗi nhóm thời gian. Số đo từ nhiều thiết bị hoặc ứng dụng được gồm cùng nhau.

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. Đối với xuất mới, khuyến nghị 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": "bpm"
    }
  ],
  "route": [
    {
      "lat": 37.7749,
      "lon": -122.4194,
      "altitude": 50.5,
      "timestamp": "2024-02-06 07:00:00 -0800"
    }
  ]
}

Tài liệu liên quan