C語言是一種非常常用的編程語言,尤其是在系統編程和嵌入式開發領域。在許多應用中,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數據 json_decref(root); return 0; }
上述代碼使用了libcurl和jansson庫。首先,它定義了一個名為buffer的緩沖區,用于存儲從網絡中獲取的JSON數據。write_callback函數是一個回調函數,用于處理由libcurl請求過程生成的數據。在request_json函數中,它將curl_easy_setopt功能設置為URL和回調函數,并使用curl_easy_perform函數執行請求。如果請求失敗,則會發出錯誤消息。否則,使用json_loads函數將數據解析為JSON對象。
最后,main函數調用request_json并檢查是否成功加載JSON數據。如果成功,則可以使用數據執行其他操作。