在進(jìn)行程序開發(fā)時,我們經(jīng)常需要獲取由JSON格式呈現(xiàn)的數(shù)據(jù)。而使用C語言來獲取這些數(shù)據(jù),我們可以利用C request這個API來實現(xiàn)。下面是一份使用C request獲取JSON數(shù)據(jù)的代碼示例:
#include#include #include size_t callbackFunction(void *ptr, size_t size, size_t memory, void *stream) { return fwrite(ptr, size, memory, (FILE*)stream); } int main(int argc, char *argv[]) { CURL *curl; CURLcode res; FILE *output_file; struct json_object *parsed_json; struct json_object *name; struct json_object *age; char *name_string; int age_int; curl = curl_easy_init(); if(curl) { printf("Initiating CURL connection...\n"); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/data.json"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); output_file = fopen("data.json", "wb"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callbackFunction); curl_easy_setopt(curl, CURLOPT_WRITEDATA, output_file); res = curl_easy_perform(curl); curl_easy_cleanup(curl); fclose(output_file); printf("CURL connection closed.\n"); printf("Parsing JSON data...\n"); parsed_json = json_object_from_file("data.json"); json_object_object_get_ex(parsed_json, "name", &name); json_object_object_get_ex(parsed_json, "age", &age); name_string = json_object_get_string(name); age_int = json_object_get_int(age); printf("Name: %s\nAge: %d\n", name_string, age_int); json_object_put(parsed_json); printf("JSON data parsing complete.\n"); return 0; } return 1; }
上述代碼首先初始化一個CURL連接,接著使用curl_easy_setopt函數(shù)設(shè)置CURL連接中的參數(shù),其中CURLOPT_URL參數(shù)為我們需要訪問獲取JSON數(shù)據(jù)的URL地址,CURLOPT_FOLLOWLOCATION參數(shù)用于告訴CURL讓其自動跟蹤重定向鏈接,CURLOPT_WRITEFUNCTION參數(shù)用于指定回調(diào)函數(shù)以將請求獲取的數(shù)據(jù)寫入本地的文件中。
隨著CURL連接完成之后,我們通過使用json-c這個C語言的JSON處理庫來對獲取的JSON數(shù)據(jù)進(jìn)行解析。其中json_object_from_file函數(shù)用于從本地文件中讀取JSON對象,而json_object_object_get_ex函數(shù)用于從JSON對象中獲取特定的值,并將其存儲在各自對應(yīng)的變量中。
在獲取和解析完JSON數(shù)據(jù)后,我們就可以直接使用以上代碼中所定義的變量,來訪問JSON數(shù)據(jù)并將其作為程序的輸入進(jìn)一步進(jìn)行處理。