在網絡發展的今天,我們可以訪問到全世界各種各樣的網站,但是這些網站的數據一般是以HTML的形式呈現的,如果我們想在我們自己的程序中使用這些數據,那么我們就需要用到c語言將網站轉為json格式。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #include <json-c/json.h> //回調函數,在curl_easy_setopt中使用 size_t callback(void *data, size_t size, size_t nmemb, void *userp) { char *tmp = malloc(size * nmemb + 1); memcpy(tmp, data, size * nmemb); tmp[size * nmemb] = '\0'; json_object *json = json_tokener_parse(tmp); free(tmp); json_object **out = userp; *out = json; return size * nmemb; } //將網站轉為json格式 json_object *websiteToJson(char *url) { CURL *curl = curl_easy_init(); CURLcode res; struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Accept: application/json"); json_object *result = NULL; if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result); 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); return NULL; } curl_easy_cleanup(curl); } return result; } int main() { json_object *json = websiteToJson("http://example.com"); if (json) { printf("%s", json_object_to_json_string(json)); } json_object_put(json); return 0; }
以上代碼中我們使用了libcurl庫和json-c庫將網站轉為json格式,首先我們定義了一個回調函數,它的作用是將我們從網站獲取到的數據轉為json格式。接著定義了一個函數websiteToJson,它的作用是將網站的數據以json格式返回。最后我們在main函數中使用websiteToJson函數并將數據以json格式輸出。
上一篇c 序列化json數據
下一篇c 將類轉化為json