隨著互聯網技術的發展,越來越多的數據以json格式呈現。在C語言中,我們可以通過http請求獲取json數據,進而對其進行處理。本文將介紹C語言中通過http獲取json數據的方法。
#include#include int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/json_data.json"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); 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 0; } static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; char *ptr = realloc(userp, size*nmemb+1); if(!ptr) { fprintf(stderr, "realloc() failed\n"); return 0; } userp = ptr; memcpy(userp, contents, realsize); ((char*)userp)[realsize] = 0; return realsize; }
以上為curl獲取json數據的代碼。我們可以看到,在代碼中,使用curl庫進行http請求,其中curl_easy_setopt函數中,設置CURLOPT_URL為請求的url地址,CURLOPT_FOLLOWLOCATION為是否跟隨重定向,CURLOPT_WRITEFUNCTION為獲取數據后對數據處理的回調函數。
獲取到數據后,我們可以通過json-c庫進行解析。json-c是一個易于使用的json庫,提供了多種操作json數據的方法,例如解析、創建、刪除等。
#include#include int main() { const char *json_str = "{\"name\":\"json-c\",\"year\": \"2019\"}"; struct json_object *jobj = json_tokener_parse(json_str); printf("name=%s, year=%d\n", json_object_get_string(json_object_object_get(jobj, "name")), json_object_get_int(json_object_object_get(jobj, "year"))); json_object_put(jobj); return 0; }
以上為使用json-c庫解析json數據的代碼。我們可以看到,在代碼中,使用json_tokener_parse函數對json字符串進行解析,然后使用json_object_object_get函數獲取相應變量的值。