C語言是一種高效的編程語言,可以使用它來實現訪問服務獲取JSON的功能。在C語言中,我們可以利用一些庫和工具來處理JSON數據。下面介紹一種基本的方法。
#include#include #include #include #include int main(int argc, char **argv) { CURL *curl_handle; char *response = NULL; int response_len = 0; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); curl_easy_setopt(curl_handle, CURLOPT_URL, "http://api.example.com/getjsondata"); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, callback_function); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&response); CURLcode res = curl_easy_perform(curl_handle); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { json_error_t error; json_t *root; root = json_loads(response, JSON_DECODE_ANY, &error); if(!root) { fprintf(stderr, "json error on line %d: %s\n", error.line, error.text); return -1; } //處理JSON數據 json_decref(root); } curl_easy_cleanup(curl_handle); curl_global_cleanup(); if(response) { free(response); } return 0; } size_t callback_function(char *ptr, size_t size, size_t nmemb, void *userdata) { char *p = NULL; size_t realsize = size * nmemb; p = realloc(userdata, response_len + realsize + 1); if(p == NULL) { fprintf(stderr, "realloc failed\n"); return 0; } userdata = p; memcpy(userdata + response_len, ptr, realsize); response_len += realsize; *((char*)userdata + response_len) = '\0'; return realsize; }
上述代碼中使用了curl和jansson庫來實現訪問服務獲取JSON。首先使用curl_easy_setopt設置url和回調函數,回調函數主要是將獲取到的數據寫入用戶數據緩沖區中。然后調用curl_easy_perform函數開始獲取服務數據。獲取到數據后,使用jansson庫將JSON數據解析成C語言的數據類型進行處理。最后清理curl資源和釋放內存。