在C語言中,要解析和加載JSON數據,可以使用一些開源庫,例如cJSON、jansson、yajl等等。其中比較常用的是cJSON。
cJSON是一個輕量級的JSON解析器,可以解析JSON格式的字符串并以C語言中的數據結構存儲數據。cJSON存在于單一的.h頭文件中,使用十分方便,只需要包含頭文件即可。
/* * 示例代碼:解析JSON數據并打印出對應的值 */ #include <stdio.h> #include <cJSON.h> int main() { char* json_data = "{\"name\":\"張三\", \"age\": 23, \"hobby\":[\"basketball\",\"music\"]}"; cJSON* json = cJSON_Parse(json_data); if (!json) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON* name = cJSON_GetObjectItem(json, "name"); cJSON* age = cJSON_GetObjectItem(json, "age"); cJSON* hobby = cJSON_GetObjectItem(json, "hobby"); printf("姓名:%s\n", name->valuestring); printf("年齡:%d\n", age->valueint); printf("愛好:\n"); cJSON* hobby_item = NULL; cJSON_ArrayForEach(hobby_item, hobby) { printf("%s\n", hobby_item->valuestring); } cJSON_Delete(json); // 記得釋放內存 return 0; }
該示例代碼中,首先定義了一個JSON格式的字符串,接著調用cJSON_Parse函數將json_data解析成CJSON結構體,如果解析失敗則會返回NULL。然后通過cJSON_GetObjectItem函數獲得對應的值,其中需要傳入解析后的CJSON結構體和要獲取值的鍵名。通過該函數獲取到的值是CJSON中的最小單元,可以使用不同的value*類型訪問其值。最后使用cJSON_ArrayForEach函數遍歷數組類型的值。