在C語言中,我們經常需要讀取網頁上的JSON格式數據,以便對其進行進一步的處理。下面介紹一種使用C語言讀取網頁JSON數據庫的方法。
#include <stdlib.h> #include <stdio.h> #include <curl/curl.h> #include <jansson.h> int main() { CURL *curl; CURLcode res; char *url = "https://example.com/json_data"; char *response_str; json_t *root; json_error_t error; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); response_str = (char *) malloc(sizeof(char)); curl_easy_setopt(curl, CURLOPT_WRITEDATA, response_str); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { root = json_loads(response_str, 0, &error); if (!root) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); exit(1); } // do something with root json_decref(root); } curl_easy_cleanup(curl); } free(response_str); return 0; } size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; char *response_str = (char *) userdata; response_str = realloc(response_str, strlen(response_str) + realsize + 1); if (response_str == NULL) { fprintf(stderr, "realloc() failed\n"); exit(EXIT_FAILURE); } strncat(response_str, ptr, realsize); return realsize; }
上面的例子使用了libcurl和jansson庫。使用curl_easy_init初始化一個CURL對象,使用curl_easy_setopt函數設置選項,包括URL、寫入回調函數、SSL驗證等,然后使用curl_easy_perform執行curl會話。返回的JSON字符串使用json_loads函數轉換為jansson庫中的jansson_t類型。這份代碼演示了一個簡單的GET請求。更復雜的請求可以在這個基礎上進行擴展。
下一篇c 讀取表生成json