在C語言中,解析JSON數據需要使用第三方庫,常見的庫有兩種:cJSON和jansson。
下面以cJSON為例介紹如何使用。
#include <stdio.h> #include <cjson/cJSON.h> int main() { char *json_str = "{\"name\":\"Alice\",\"age\":20}"; cJSON *json = cJSON_Parse(json_str); // 解析JSON字符串 if (json != NULL) { cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name"); // 獲取字符串類型的值 cJSON *age = cJSON_GetObjectItemCaseSensitive(json, "age"); // 獲取數值類型的值 if (cJSON_IsString(name) && cJSON_IsNumber(age)) { // 判斷類型是否正確 printf("%s is %d years old.\n", name->valuestring, age->valueint); // 打印結果 } cJSON_Delete(json); // 釋放內存 } else { printf("JSON string is invalid.\n"); } return 0; }
以上代碼解析了一個JSON對象,取出其中的name和age字段,分別打印出來。其中例子中的JSON字符串為:
{ "name": "Alice", "age": 20 }
函數cJSON_Parse用于解析JSON字符串,返回一個指向cJSON結構體的指針。函數cJSON_GetObjectItemCaseSensitive用于獲取JSON對象字段的值,第一個參數為JSON對象,第二個參數為字段名。在獲取字段值的時候需要判斷類型是否正確,函數cJSON_IsString和cJSON_IsNumber用于判斷是否為字符串類型和數值類型。最后需要使用cJSON_Delete釋放內存。