#if 1
bool TraingModel::SaveDataToJson(SportData *data)
{
- if (data == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data is error");
- return false;
- }
- printf_data(data);
+ FILE *fp;
+ char *jsonStr = NULL;
- // 获取 JSON 文件,不存在则创建
- FILE *fp = fopen(TRAINING_RECORD_FILE, "r");
- if (fp == NULL)
+ // 读取现有的 JSON 数据
+ fp = fopen(TRAINING_RECORD_FILE, "r");
+ cJSON *data_root = NULL;
+ cJSON *dataArray = NULL;
+
+ if (fp != NULL)
{
- fp = fopen(TRAINING_RECORD_FILE, "w+");
- if (fp == NULL)
+ fseek(fp, 0, SEEK_END);
+ long fileSize = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+
+ jsonStr = (char *)malloc(fileSize + 1);
+ if (jsonStr != nullptr)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open file for writing");
- return false;
+ if (fread(jsonStr, fileSize, 1, fp) == 1)
+ {
+ data_root = cJSON_Parse(jsonStr);
+ if (data_root != NULL)
+ {
+ dataArray = cJSON_GetObjectItem(data_root, "data");
+ }
+ }
}
- }
-
- // 读取并解析现有的 JSON 数据
- fseek(fp, 0, SEEK_END);
- long fileSize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
-
- char *jsonStr = (char *)malloc(fileSize + 1);
- if (jsonStr == NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to allocate memory for JSON data");
fclose(fp);
- return false;
}
- fread(jsonStr, 1, fileSize, fp);
- fclose(fp);
- cJSON *root = cJSON_Parse(jsonStr);
- if (root == NULL)
+ if (dataArray == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to parse JSON data");
- free(jsonStr);
- return false;
+ data_root = cJSON_CreateObject();
+ cJSON_AddItemToObject(data_root, "data", cJSON_CreateArray());
+ dataArray = cJSON_GetObjectItem(data_root, "data");
}
// 创建或更新数据节点
- cJSON *dataArray = cJSON_GetObjectItem(root, "data");
cJSON *sportData = cJSON_CreateObject();
cJSON_AddNumberToObject(sportData, "sportTypeId", int(data->sportType)); // 训练项目类 Id
cJSON_AddNumberToObject(sportData, "sportId", data->sportId); // 训练项目 Id
cJSON_AddNumberToObject(sportData, "avgHeartRate", data->avgheart); // 训练平均心率
cJSON_AddNumberToObject(sportData, "steps", data->steps); // 训练步数
cJSON_AddNumberToObject(sportData, "intensity", data->intensity); // 训练强度
- cJSON_AddItemToArray(dataArray, sportData);
- // 限制存储数量并删除多余数据
+ // 添加运动数据节点到数组并限制数量
+ cJSON_AddItemToArray(dataArray, sportData);
while (cJSON_GetArraySize(dataArray) > MAX_DATA_COUNT)
{
cJSON_DeleteItemFromArray(dataArray, 0);
}
// 将更新后的 JSON 数据写入文件
- char *jsonStrNew = cJSON_Print(root);
- if (jsonStrNew == NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to serialize JSON data");
- cJSON_Delete(root);
- free(jsonStr);
- return false;
- }
-
+ char *jsonStrNew = cJSON_Print(data_root);
fp = fopen(TRAINING_RECORD_FILE, "w");
- if (fp == NULL)
+ if (fp != NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for writing");
- cJSON_Delete(root);
- free(jsonStr);
- return false;
+ fwrite(jsonStrNew, strlen(jsonStrNew), 1, fp);
+ fclose(fp);
}
- fwrite(jsonStrNew, strlen(jsonStrNew), 1, fp);
- fclose(fp);
-
// 释放资源
- cJSON_Delete(root);
+ cJSON_Delete(data_root);
free(jsonStr);
cJSON_free(jsonStrNew);
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "SaveDataToJson succeeded");
return true;
}
#endif