JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易于閱讀和編寫。在C語言中可以通過使用第三方庫來解析JSON數據。常見的解析庫有cJSON和Jansson。
在使用cJSON庫解析JSON數據時,需要先將JSON數據字符串轉換為cJSON對象。可以使用cJSON_Parse()函數將數據字符串轉換為cJSON對象:
cJSON* root = cJSON_Parse(jsonString);
其中jsonString為要解析的JSON數據字符串。解析成功后,可以通過cJSON對象的各種函數來獲取JSON數據中的信息。例如,可以通過cJSON_GetObjectItem()函數來獲取JSON數據中的某個屬性:
cJSON* prop = cJSON_GetObjectItem(root, "property"); if (prop != NULL) { printf("property value: %s\n", prop->valuestring); }
如果JSON數據中有數組,可以使用cJSON_GetArrayItem()函數來獲取數組中的某個元素:
cJSON* arr = cJSON_GetObjectItem(root, "array"); if (arr != NULL && cJSON_IsArray(arr)) { cJSON* elem = cJSON_GetArrayItem(arr, 0); if (elem != NULL) { printf("array element: %s\n", elem->valuestring); } }
在使用完cJSON對象后,需要使用cJSON_Delete()函數來釋放內存:
cJSON_Delete(root);
除了cJSON庫外,Jansson庫也是一個流行的解析JSON數據的庫。使用Jansson庫也需要先將數據字符串轉換為Jansson對象。可以使用json_loads()函數將數據字符串轉換為Jansson對象:
json_t* root = json_loads(jsonString, 0, &error); if (!root) { printf("json_loads() failed: %s\n", error.text); json_error_free(&error); return; }
其中error是json_error_t類型的結構體,用于記錄解析錯誤信息。解析成功后,可以使用json_object_get()函數獲取JSON數據中的某個屬性:
json_t* prop = json_object_get(root, "property"); if (prop != NULL) { printf("property value: %s\n", json_string_value(prop)); }
如果JSON數據中有數組,可以使用json_array_get()函數獲取數組中的某個元素:
json_t* arr = json_object_get(root, "array"); if (arr != NULL && json_is_array(arr)) { json_t* elem = json_array_get(arr, 0); if (elem != NULL) { printf("array element: %s\n", json_string_value(elem)); } }
在使用完Jansson對象后,需要使用json_decref()函數來釋放內存:
json_decref(root);