C語言是一種非常常用的編程語言,尤其是在系統(tǒng)編程和嵌入式開發(fā)領(lǐng)域。在許多應(yīng)用中,C語言需要請求JSON文件格式。
/* 讀取JSON文件的代碼示例 */ #include#include #include #include #include static char* buffer = NULL; static size_t buffer_size = 0; static size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) { size_t realsize = size * nmemb; buffer = realloc(buffer, buffer_size + realsize); if (buffer == NULL) { fprintf(stderr, "Error: out of memory\n"); return 0; } memcpy(buffer + buffer_size, ptr, realsize); buffer_size += realsize; buffer[buffer_size] = 0; return realsize; } json_t* request_json(const char* url) { CURL* curl_handle = curl_easy_init(); CURLcode res; buffer = NULL; buffer_size = 0; curl_easy_setopt(curl_handle, CURLOPT_URL, url); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback); res = curl_easy_perform(curl_handle); if (res != CURLE_OK) { fprintf(stderr, "Error: %s\n", curl_easy_strerror(res)); goto error; } json_error_t error; json_t* root = json_loads(buffer, 0, &error); if (root == NULL) { fprintf(stderr, "Error on line %d: %s\n", error.line, error.text); goto error; } curl_easy_cleanup(curl_handle); return root; error: if (buffer != NULL) { free(buffer); } curl_easy_cleanup(curl_handle); return NULL; } int main() { const char* url = "http://example.com/data.json"; json_t* root = request_json(url); if (root == NULL) { fprintf(stderr, "Error: could not load JSON data\n"); return 1; } // TODO: 使用JSON數(shù)據(jù) json_decref(root); return 0; }
上述代碼使用了libcurl和jansson庫。首先,它定義了一個名為buffer的緩沖區(qū),用于存儲從網(wǎng)絡(luò)中獲取的JSON數(shù)據(jù)。write_callback函數(shù)是一個回調(diào)函數(shù),用于處理由libcurl請求過程生成的數(shù)據(jù)。在request_json函數(shù)中,它將curl_easy_setopt功能設(shè)置為URL和回調(diào)函數(shù),并使用curl_easy_perform函數(shù)執(zhí)行請求。如果請求失敗,則會發(fā)出錯誤消息。否則,使用json_loads函數(shù)將數(shù)據(jù)解析為JSON對象。
最后,main函數(shù)調(diào)用request_json并檢查是否成功加載JSON數(shù)據(jù)。如果成功,則可以使用數(shù)據(jù)執(zhí)行其他操作。