在C語言中操作JSON文件需要用到第三方的JSON解析庫,比如常見的cJSON。cJSON可以輕松地解析JSON字符串并進行數據組織和讀寫操作。
#include <stdio.h> #include <stdlib.h> #include <cJSON.h> int main(void) { // 創建JSON對象 cJSON* root = cJSON_CreateObject(); // 添加鍵值對 cJSON_AddStringToObject(root, "name", "張三"); cJSON_AddNumberToObject(root, "age", 24); cJSON* hobbies = cJSON_CreateArray(); cJSON_AddItemToArray(hobbies, cJSON_CreateString("看電影")); cJSON_AddItemToArray(hobbies, cJSON_CreateString("打游戲")); cJSON_AddItemToObject(root, "hobbies", hobbies); // 將JSON對象轉成字符串 char* json = cJSON_Print(root); printf("%s", json); // 釋放內存 free(json); cJSON_Delete(root); return 0; }
上述代碼中,我們使用cJSON庫創建了一個JSON對象,并添加了3個鍵值對,分別是"name"、"age"和"hobbies"。其中,"hobbies"是一個數組類型的鍵值對,我們使用cJSON_CreateArray()函數創建了一個新的cJSON數組,并添加了兩個值,"看電影"和"打游戲"。最后,我們使用cJSON_Print()函數將cJSON對象轉換成字符串并打印出來。
除了創建JSON對象,我們還可以使用cJSON_Parse()函數解析JSON字符串。
#include <stdio.h> #include <cJSON.h> int main(void) { // 待解析的JSON字符串 char* json_str = "{ \"name\": \"李四\", \"age\": 30, \"gender\": \"male\" }"; // 解析JSON字符串 cJSON* root = cJSON_Parse(json_str); if (root != NULL) { cJSON* name = cJSON_GetObjectItemCaseSensitive(root, "name"); cJSON* age = cJSON_GetObjectItemCaseSensitive(root, "age"); cJSON* gender = cJSON_GetObjectItemCaseSensitive(root, "gender"); if (cJSON_IsString(name) && cJSON_IsNumber(age) && cJSON_IsString(gender)) { printf("姓名:%s\n", name->valuestring); printf("年齡:%d\n", age->valueint); printf("性別:%s\n", gender->valuestring); } cJSON_Delete(root); } return 0; }
在上述代碼中,我們使用cJSON_Parse()函數將json_str解析成了cJSON對象。然后,使用cJSON_GetObjectItemCaseSensitive()函數獲取了"name"、"age"和"gender"對應的cJSON對象,以及使用cJSON_IsXXX()判斷類型是否匹配。最后,我們打印出了解析后的數據。