在C語言中,我們可以通過一些第三方庫來解析和處理JSON格式的數據。其中比較常用的有cJSON和jansson兩個庫。
下面我們以cJSON為例,演示如何從JSON數據中取出需要的數據。
//示例JSON數據 char* json_data = "{ \"name\": \"Tom\", \"age\": 26, \"city\": \"Beijing\", \"skills\": [\"C++\", \"Java\", \"Python\"], \"projects\": [ { \"name\": \"ProjectA\", \"description\": \"xxx\", \"status\": true }, { \"name\": \"ProjectB\", \"description\": \"yyy\", \"status\": false } ] }"; //從JSON數據中獲取name字段的值 cJSON *json = cJSON_Parse(json_data); char* name = cJSON_GetObjectItem(json, "name")->valuestring; printf("name: %s\n", name); //從JSON數據中獲取skills數組中的第二個元素 cJSON *skills = cJSON_GetObjectItem(json, "skills"); cJSON *skill2 = cJSON_GetArrayItem(skills, 1); printf("skill2: %s\n", skill2->valuestring); //從JSON數據中獲取projects數組中status為true的項目名 cJSON *projects = cJSON_GetObjectItem(json, "projects"); for (int i = 0; i< cJSON_GetArraySize(projects); i++) { cJSON *project = cJSON_GetArrayItem(projects, i); cJSON *status = cJSON_GetObjectItem(project, "status"); if (cJSON_IsTrue(status)) { cJSON *name = cJSON_GetObjectItem(project, "name"); printf("Project name: %s\n", name->valuestring); } } //釋放資源 cJSON_Delete(json);
通過cJSON_Parse將JSON字符串解析成cJSON對象,然后通過cJSON_GetObjectItem和cJSON_GetArrayItem等方法獲取需要的數據。
需要注意的是,使用完cJSON對象之后,需要調用cJSON_Delete方法釋放資源,避免內存泄漏問題。