隨著互聯網時代的不斷發展,很多Web應用程序都需要與服務器交換數據。其中,JSON(JavaScript Object Notation)已經成為了一種非常流行的數據交換格式。
那么,C語言能否獲取JSON數據呢?答案是肯定的。
/**
* @brief 通過curl獲取json數據
* @param url json數據所在的URL
* @return json數據
*/
char* getJsonFromURL(char* url) {
CURL* curl;
CURLcode res;
char* jsonData;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* 關鍵步驟:設置curl接收返回的JSON數據 */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &jsonData);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return jsonData;
}
/**
* @brief 寫入數據的回調函數
* @param buf 數據緩沖區
* @param size 每個數據塊的大小
* @param nmemb 數據塊數量
* @param userp 用戶指針
* @return 返回實際寫入的數據大小
*/
static size_t write_callback(char* buf, size_t size, size_t nmemb, char** userp) {
if (userp != NULL) {
*userp = (char*)malloc(size * nmemb + 1);
memcpy(*userp, buf, size * nmemb);
(*userp)[size * nmemb] = '\0';
}
return size * nmemb;
}
如上代碼所示,我們可以使用libcurl這個C語言庫來從指定URL獲取JSON數據。需要注意的是,我們要使用curl_easy_setopt()函數來設置為“接收返回的JSON數據”,同時要自己編寫回調函數write_callback()來處理返回的數據。
總之,雖然C語言沒有針對JSON數據的特定庫,但借助于開源庫和回調函數,我們仍然可以從服務器中獲取到JSON數據并在程序中進行解析和處理。