JSON是一種輕量級的數據交換格式,常用于前后端數據傳遞。在C語言中,我們可以使用第三方庫cJSON來處理JSON數據。
cJSON的使用很簡單,但在處理JSON數據時需要注意size的問題。
cJSON *root = cJSON_Parse(json_data); if (root == NULL) { printf("parse json error\n"); return -1; } // 處理JSON數據 cJSON_Delete(root); // 需要手動釋放內存
在上述代碼中,我們首先解析JSON數據并將其存儲到root中,然后處理JSON數據,最后手動釋放內存(cJSON_Delete函數)。在處理JSON數據時,我們需要注意數據類型和size。
cJSON *cjson_obj = cJSON_GetObjectItem(root, "obj"); if (cjson_obj == NULL) { printf("get obj error\n"); cJSON_Delete(root); return -1; } // 處理obj內部數據 char *str = cJSON_GetObjectItem(cjson_obj, "str")->valuestring; int num = cJSON_GetObjectItem(cjson_obj, "num")->valueint; double real_num = cJSON_GetObjectItem(cjson_obj, "real_num")->valuedouble; cJSON *arr = cJSON_GetObjectItem(cjson_obj, "arr"); if (arr == NULL) { printf("get arr error\n"); cJSON_Delete(root); return -1; } // 處理arr數組數據 for (int i = 0; i< cJSON_GetArraySize(arr); i++) { cJSON *item = cJSON_GetArrayItem(arr, i); if (cJSON_IsString(item)) { printf("%s\n", item->valuestring); } else if (cJSON_IsNumber(item)) { printf("%d\n", item->valueint); } } cJSON_Delete(root);
在上述代碼中,我們對obj和arr內部數據進行處理。在獲取obj中的具體數據時,我們需要使用相應的類型和size,例如字符串類型使用valuestring,整數類型使用valueint,浮點數類型使用valuedouble。在獲取arr數組數據時,我們需要使用cJSON_GetArraySize獲取數組長度,使用cJSON_GetArrayItem獲取數組元素。同時要記得使用cJSON_IsString和cJSON_IsNumber判斷元素類型。
總之,在使用cJSON處理JSON數據時,我們需要認真處理各個數據類型和size,避免發生內存泄漏和數據類型錯誤。
上一篇vue jq