C語言是一種被廣泛應用在嵌入式系統和操作系統開發中的語言。在這些場景下,我們經常需要從外部獲取數據,JSON是一種廣泛應用在數據傳輸和存儲中的格式。本文將介紹如何在C語言中獲取JSON數據。
在C語言中獲取JSON數據,常用的方法是使用C語言的網絡編程庫curl。Curl是一個開源且廣泛使用的跨平臺網絡傳輸工具,可以支持各種協議(例如HTTP、FTP等),而且在C語言中使用也非常方便。以下是獲取JSON數據的相關代碼。
// 首先要引入curl庫 #include// 定義一個用于接收數據的結構體 struct MemoryStruct { char *memory; size_t size; }; // 用于接收數據的回調函數 static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)userp; mem->memory = realloc(mem->memory, mem->size + realsize + 1); if(mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } int main(void) { CURL *curl_handle; CURLcode res; // 定義用于接收數據的結構體 struct MemoryStruct chunk; // 初始化curl句柄 curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); // 設置請求的URL curl_easy_setopt(curl_handle, CURLOPT_URL, "https://example.com/api/data.json"); // 將接收數據的回調函數綁定到curl句柄上 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); // 將接收數據的結構體指針傳遞給回調函數 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); // 執行HTTP請求 res = curl_easy_perform(curl_handle); // 關閉curl句柄 curl_easy_cleanup(curl_handle); // 如果請求成功,可以通過chunk.memory獲取到接收到的JSON數據 printf("%lu bytes retrieved", (long)chunk.size); printf("%s", chunk.memory); // 釋放內存 free(chunk.memory); return 0; }
上述代碼中,我們通過定義一個用于接收數據的結構體MemoryStruct以及一個接收數據的回調函數WriteMemoryCallback來獲取JSON數據。回調函數中的realloc函數用于重新分配內存,保證我們能夠接收到較大的數據。通過curl_easy_setopt函數設置相應的選項參數,比如請求的URL、回調函數等。最后調用curl_easy_perform函數執行HTTP請求,獲取JSON數據。