在C語(yǔ)言中,使用JSON(JavaScript Object Notation)格式的數(shù)據(jù)是非常常見(jiàn)的。JSON是一種輕量級(jí)的數(shù)據(jù)格式,它被廣泛應(yīng)用于Web和移動(dòng)應(yīng)用程序的開(kāi)發(fā)中。在C語(yǔ)言中,我們可以使用第三方庫(kù),如cJSON等來(lái)讀取JSON文件。以下是一個(gè)讀取JSON文件并返回字符串?dāng)?shù)組的示例代碼:
#include <stdio.h> #include <string.h> #include <cjson/cJSON.h> int main() { char* filename = "data.json"; char* data = NULL; char** arr = NULL; FILE* fp = fopen(filename, "rb"); fseek(fp, 0, SEEK_END); long length = ftell(fp); fseek(fp, 0, SEEK_SET); data = (char*)malloc(length + 1); fread(data, 1, length, fp); fclose(fp); data[length] = '\0'; cJSON* root = cJSON_Parse(data); if (root != NULL) { cJSON* array = cJSON_GetObjectItemCaseSensitive(root, "array"); if (cJSON_IsArray(array)) { int size = cJSON_GetArraySize(array); arr = (char**)malloc((size + 1) * sizeof(char*)); arr[size] = NULL; for (int i = 0; i < size; i++) { cJSON* item = cJSON_GetArrayItem(array, i); if (cJSON_IsString(item) && item->valuestring != NULL) { arr[i] = strdup(item->valuestring); } } } cJSON_Delete(root); } for (int i = 0; arr != NULL && arr[i] != NULL; i++) { printf("%s\n", arr[i]); free(arr[i]); } free(arr); free(data); return 0; }
在上面的代碼中,我們使用了cJSON庫(kù)來(lái)解析JSON文件。首先,我們使用C標(biāo)準(zhǔn)庫(kù)中的文件操作函數(shù)來(lái)打開(kāi)文件,并讀取文件內(nèi)容。然后,我們使用cJSON庫(kù)中的函數(shù)將JSON字符串解析為一個(gè)cJSON對(duì)象。接下來(lái),我們查找JSON對(duì)象中的數(shù)組字段,并遍歷數(shù)組中的所有元素,將元素存儲(chǔ)在字符串?dāng)?shù)組中。需要注意的是,我們?cè)诖鎯?chǔ)每個(gè)元素時(shí)使用了strdup函數(shù),以便在程序結(jié)束后可以正確釋放內(nèi)存。
最后,我們遍歷字符串?dāng)?shù)組,并逐一輸出每個(gè)字符串。輸出結(jié)束后,我們釋放了字符串?dāng)?shù)組中所有元素和整個(gè)字符串?dāng)?shù)組的內(nèi)存。