在進行Web開發(fā)中,常常需要使用C程序調用接口以獲取數據。當接口返回的數據類型是JSON時,如何提取數據呢?
/* 使用C語言進行HTTP GET請求,并獲取返回的JSON數據類型 */ #include<stdio.h> #include<stdlib.h> #include<curl/curl.h> #include<jansson.h> size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream) { size_t written = fwrite(ptr, size, nmemb, (FILE *)stream); return written; } int main() { // 初始化CURL CURL *curl = curl_easy_init(); if(!curl) { fprintf(stderr, "Couldn't init curl."); return -1; } // 設置請求的URL curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/api/data.json"); // 添加header struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Accept: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 設置回調函數 FILE *fp = fopen("data.json", "wb"); if(!fp) { fprintf(stderr, "Couldn't open file."); curl_easy_cleanup(curl); return -1; } curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); // 發(fā)送請求 CURLcode 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); fclose(fp); return -1; } // 關閉文件 fclose(fp); // 讀取JSON數據 json_t *root; json_error_t error; root = json_load_file("data.json", 0, &error); if(!root) { fprintf(stderr, "json_load_file() failed: %s\n", error.text); return -1; } // 從JSON數據中提取信息 json_t *data = json_object_get(root, "data"); json_t *array = json_object_get(data, "array"); for(int i = 0; i< json_array_size(array); i++) { json_t *item = json_array_get(array, i); char *name = json_string_value(json_object_get(item, "name")); int age = json_integer_value(json_object_get(item, "age")); printf("Name: %s, Age: %d\n", name, age); } // 釋放資源 json_decref(root); curl_easy_cleanup(curl); curl_slist_free_all(headers); return 0; }
以上代碼實現了一個HTTP GET請求返回JSON類型數據的例子。我們使用CURL庫來發(fā)送HTTP請求,并將返回的JSON數據保存到文件中。之后,我們使用jansson庫來讀取JSON數據并提取所需的信息。最后,我們釋放所有資源。
上一篇vue 跳轉 傳遞參數
下一篇vue 運行生產模式