C語言是一種廣泛使用的編程語言,在Web開發(fā)中使用JSON來交換數(shù)據(jù)是很常見的。下面將介紹如何用C語言通過JSON請(qǐng)求獲取數(shù)據(jù)。
#include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; char *url = "http://example.com/data.json"; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); 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 0; }
上述代碼使用了libcurl庫來執(zhí)行HTTP GET請(qǐng)求。我們需要在編譯時(shí)鏈接libcurl庫。
此時(shí)我們得到的JSON響應(yīng)是一個(gè)字符串。我們需要使用一個(gè)JSON庫來解析這個(gè)字符串。下面是使用Jansson庫解析JSON的示例代碼:
#include <stdio.h> #include <jansson.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; char *url = "http://example.com/data.json"; json_t *root; json_error_t error; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); root = json_loads(curlbuf.memory, 0, &error); if(!root) { fprintf(stderr, "json_loads failed: line %d: %s\n", error.line, error.text); return 1; } json_t *employees; employees = json_object_get(root, "employees"); size_t index; json_t *value; json_array_foreach(employees, index, value) { json_t *employee_name; employee_name = json_object_get(value, "name"); printf("name: %s\n", json_string_value(employee_name)); } json_decref(root); curl_easy_cleanup(curl); } return 0; }
上述代碼通過使用json_object_get()和json_array_foreach()函數(shù)在JSON響應(yīng)中查找元素。我們可以使用其他JSON庫執(zhí)行類似的操作。