在使用 C 語(yǔ)言編寫程序中,我們經(jīng)常需要調(diào)用 API 接口來(lái)獲取想要的數(shù)據(jù)。其中,返回 JSON 格式的數(shù)據(jù)在現(xiàn)代 Web 開(kāi)發(fā)中已經(jīng)非常常見(jiàn)了。接下來(lái),我們來(lái)看看如何使用 C 語(yǔ)言調(diào)用 API 接口并返回 JSON 數(shù)據(jù)庫(kù)。
#include <stdio.h> #include <stdlib.h> #include <curl/curl.h> #include <jansson.h> size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; char *data = (char *)userdata; memcpy(data, ptr, realsize); return realsize; } int main(int argc, char **argv) { CURL *curl; CURLcode res; char data[4096] = {0}; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/todos/1"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, data); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { json_t *root; json_error_t error; root = json_loads(data, 0, &error); if (root) { json_t *userId, *id, *title, *completed; userId = json_object_get(root, "userId"); id = json_object_get(root, "id"); title = json_object_get(root, "title"); completed = json_object_get(root, "completed"); printf("userId: %ld\n", json_integer_value(userId)); printf("id: %ld\n", json_integer_value(id)); printf("title: %s\n", json_string_value(title)); printf("completed: %s\n", json_is_true(completed) ? "true" : "false"); json_decref(root); } else { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); } } curl_easy_cleanup(curl); } return 0; }
上面的代碼使用了 curl 庫(kù)來(lái)發(fā)送 GET 請(qǐng)求并獲取數(shù)據(jù)。獲取到的數(shù)據(jù)包含在 data 變量中,接下來(lái)我們使用 jansson 庫(kù)來(lái)解析 JSON 格式的數(shù)據(jù)并輸出到控制臺(tái)。
在執(zhí)行上述代碼后,我們會(huì)得到如下輸出:
userId: 1 id: 1 title: delectus aut autem completed: false
這就是我們從 API 接口中獲取到的 JSON 數(shù)據(jù),現(xiàn)在我們已經(jīng)成功地使用 C 語(yǔ)言調(diào)用 API 接口并返回 JSON 數(shù)據(jù)庫(kù)了。